Mercurial > emacs
annotate src/w32fns.c @ 32684:303175f14c7d
(height-affecting-face-attributes): Use `defconst'.
author | Miles Bader <miles@gnu.org> |
---|---|
date | Fri, 20 Oct 2000 12:21:30 +0000 |
parents | 092d2df2a6c3 |
children | 0574ffc14f77 |
rev | line source |
---|---|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16602
diff
changeset
|
1 /* Graphical user interface functions for the Microsoft W32 API. |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2 Copyright (C) 1989, 92, 93, 94, 95, 1996, 1997, 1998, 1999 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3 Free Software Foundation, Inc. |
13434 | 4 |
5 This file is part of GNU Emacs. | |
6 | |
7 GNU Emacs is free software; you can redistribute it and/or modify | |
8 it under the terms of the GNU General Public License as published by | |
9 the Free Software Foundation; either version 2, or (at your option) | |
10 any later version. | |
11 | |
12 GNU Emacs is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GNU Emacs; see the file COPYING. If not, write to | |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
13434
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:
13434
diff
changeset
|
20 Boston, MA 02111-1307, USA. */ |
13434 | 21 |
22 /* Added by Kevin Gallo */ | |
23 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
24 #include <config.h> |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
25 |
13434 | 26 #include <signal.h> |
27 #include <stdio.h> | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
28 #include <limits.h> |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
29 #include <errno.h> |
13434 | 30 |
31 #include "lisp.h" | |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
32 #include "charset.h" |
31110 | 33 #include "dispextern.h" |
13434 | 34 #include "w32term.h" |
35 #include "frame.h" | |
36 #include "window.h" | |
37 #include "buffer.h" | |
28272
f62bb21d38db
(w32_wnd_proc): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27936
diff
changeset
|
38 #include "fontset.h" |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
39 #include "intervals.h" |
13434 | 40 #include "keyboard.h" |
41 #include "blockinput.h" | |
24412
d11ac02f9d6a
Use epaths.h istead of paths.h.
Richard M. Stallman <rms@gnu.org>
parents:
24339
diff
changeset
|
42 #include "epaths.h" |
16593
4ed80eda6fac
Use new names for w32 files
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
43 #include "w32heap.h" |
13434 | 44 #include "termhooks.h" |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
45 #include "coding.h" |
25069
ee9bfbc340ba
(w32_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24856
diff
changeset
|
46 #include "ccl.h" |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
47 #include "systime.h" |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
48 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
49 #include "bitmaps/gray.xbm" |
13434 | 50 |
51 #include <commdlg.h> | |
21884 | 52 #include <shellapi.h> |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
53 #include <ctype.h> |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
54 |
31110 | 55 #define max(a, b) ((a) > (b) ? (a) : (b)) |
56 | |
13434 | 57 extern void free_frame_menubar (); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
58 extern double atof (); |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
59 extern int w32_console_toggle_lock_key (int vk_code, Lisp_Object new_state); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
60 extern int quit_char; |
13434 | 61 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
62 /* A definition of XColor for non-X frames. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
63 #ifndef HAVE_X_WINDOWS |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
64 typedef struct { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
65 unsigned long pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
66 unsigned short red, green, blue; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
67 char flags; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
68 char pad; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
69 } XColor; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
70 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
71 |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
72 extern char *lispy_function_keys[]; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
73 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
74 /* The gray bitmap `bitmaps/gray'. This is done because w32term.c uses |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
75 it, and including `bitmaps/gray' more than once is a problem when |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
76 config.h defines `static' as an empty replacement string. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
77 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
78 int gray_bitmap_width = gray_width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
79 int gray_bitmap_height = gray_height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
80 unsigned char *gray_bitmap_bits = gray_bits; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
81 |
13434 | 82 /* The colormap for converting color names to RGB values */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
83 Lisp_Object Vw32_color_map; |
13434 | 84 |
14810
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
85 /* Non nil if alt key presses are passed on to Windows. */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
86 Lisp_Object Vw32_pass_alt_to_system; |
14810
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
87 |
15459
76ff60cd2b8d
(Vwin32_alt_is_meta): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15434
diff
changeset
|
88 /* Non nil if alt key is translated to meta_modifier, nil if it is translated |
76ff60cd2b8d
(Vwin32_alt_is_meta): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15434
diff
changeset
|
89 to alt_modifier. */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
90 Lisp_Object Vw32_alt_is_meta; |
15459
76ff60cd2b8d
(Vwin32_alt_is_meta): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15434
diff
changeset
|
91 |
24339
e8b73c2ac4ec
(Vw32_quit_key): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24252
diff
changeset
|
92 /* If non-zero, the windows virtual key code for an alternative quit key. */ |
e8b73c2ac4ec
(Vw32_quit_key): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24252
diff
changeset
|
93 Lisp_Object Vw32_quit_key; |
e8b73c2ac4ec
(Vw32_quit_key): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24252
diff
changeset
|
94 |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
95 /* Non nil if left window key events are passed on to Windows (this only |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
96 affects whether "tapping" the key opens the Start menu). */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
97 Lisp_Object Vw32_pass_lwindow_to_system; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
98 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
99 /* Non nil if right window key events are passed on to Windows (this |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
100 only affects whether "tapping" the key opens the Start menu). */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
101 Lisp_Object Vw32_pass_rwindow_to_system; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
102 |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
103 /* Virtual key code used to generate "phantom" key presses in order |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
104 to stop system from acting on Windows key events. */ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
105 Lisp_Object Vw32_phantom_key_code; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
106 |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
107 /* Modifier associated with the left "Windows" key, or nil to act as a |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
108 normal key. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
109 Lisp_Object Vw32_lwindow_modifier; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
110 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
111 /* Modifier associated with the right "Windows" key, or nil to act as a |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
112 normal key. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
113 Lisp_Object Vw32_rwindow_modifier; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
114 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
115 /* Modifier associated with the "Apps" key, or nil to act as a normal |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
116 key. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
117 Lisp_Object Vw32_apps_modifier; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
118 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
119 /* Value is nil if Num Lock acts as a function key. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
120 Lisp_Object Vw32_enable_num_lock; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
121 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
122 /* Value is nil if Caps Lock acts as a function key. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
123 Lisp_Object Vw32_enable_caps_lock; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
124 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
125 /* Modifier associated with Scroll Lock, or nil to act as a normal key. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
126 Lisp_Object Vw32_scroll_lock_modifier; |
14810
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
127 |
27894
6c4ff3519d09
(w32_wnd_proc) [WM_LBUTTON_DOWN, WM_RBUTTON_DOWN, WM_LBUTTON_UP,
Jason Rumney <jasonr@gnu.org>
parents:
27516
diff
changeset
|
128 /* Switch to control whether we inhibit requests for synthesized bold |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
129 and italic versions of fonts. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
130 Lisp_Object Vw32_enable_synthesized_fonts; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
131 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
132 /* Enable palette management. */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
133 Lisp_Object Vw32_enable_palette; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
134 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
135 /* Control how close left/right button down events must be to |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
136 be converted to a middle button down event. */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
137 Lisp_Object Vw32_mouse_button_tolerance; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
138 |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
139 /* Minimum interval between mouse movement (and scroll bar drag) |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
140 events that are passed on to the event loop. */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
141 Lisp_Object Vw32_mouse_move_interval; |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
142 |
13434 | 143 /* The name we're using in resource queries. */ |
144 Lisp_Object Vx_resource_name; | |
145 | |
146 /* Non nil if no window manager is in use. */ | |
147 Lisp_Object Vx_no_window_manager; | |
148 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
149 /* Non-zero means we're allowed to display a busy cursor. */ |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
150 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
151 int display_busy_cursor_p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
152 |
13434 | 153 /* The background and shape of the mouse pointer, and shape when not |
154 over text or in the modeline. */ | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
155 |
13434 | 156 Lisp_Object Vx_pointer_shape, Vx_nontext_pointer_shape, Vx_mode_pointer_shape; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
157 Lisp_Object Vx_busy_pointer_shape; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
158 |
13434 | 159 /* The shape when over mouse-sensitive text. */ |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
160 |
13434 | 161 Lisp_Object Vx_sensitive_text_pointer_shape; |
162 | |
163 /* Color of chars displayed in cursor box. */ | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
164 |
13434 | 165 Lisp_Object Vx_cursor_fore_pixel; |
166 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
167 /* Nonzero if using Windows. */ |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
168 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
169 static int w32_in_use; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
170 |
13434 | 171 /* Search path for bitmap files. */ |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
172 |
13434 | 173 Lisp_Object Vx_bitmap_file_path; |
174 | |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
175 /* Regexp matching a font name whose width is the same as `PIXEL_SIZE'. */ |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
176 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
177 Lisp_Object Vx_pixel_size_width_font_regexp; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
178 |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
179 /* Alist of bdf fonts and the files that define them. */ |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
180 Lisp_Object Vw32_bdf_filename_alist; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
181 |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
182 Lisp_Object Vw32_system_coding_system; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
183 |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
184 /* A flag to control whether fonts are matched strictly or not. */ |
24481
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
185 int w32_strict_fontnames; |
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
186 |
24695
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
187 /* A flag to control whether we should only repaint if GetUpdateRect |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
188 indicates there is an update region. */ |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
189 int w32_strict_painting; |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
190 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
191 /* Associative list linking character set strings to Windows codepages. */ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
192 Lisp_Object Vw32_charset_info_alist; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
193 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
194 /* VIETNAMESE_CHARSET is not defined in some versions of MSVC. */ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
195 #ifndef VIETNAMESE_CHARSET |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
196 #define VIETNAMESE_CHARSET 163 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
197 #endif |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
198 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
199 |
13434 | 200 /* Evaluate this expression to rebuild the section of syms_of_w32fns |
201 that initializes and staticpros the symbols declared below. Note | |
202 that Emacs 18 has a bug that keeps C-x C-e from being able to | |
203 evaluate this expression. | |
204 | |
205 (progn | |
206 ;; Accumulate a list of the symbols we want to initialize from the | |
207 ;; declarations at the top of the file. | |
208 (goto-char (point-min)) | |
209 (search-forward "/\*&&& symbols declared here &&&*\/\n") | |
210 (let (symbol-list) | |
211 (while (looking-at "Lisp_Object \\(Q[a-z_]+\\)") | |
212 (setq symbol-list | |
213 (cons (buffer-substring (match-beginning 1) (match-end 1)) | |
214 symbol-list)) | |
215 (forward-line 1)) | |
216 (setq symbol-list (nreverse symbol-list)) | |
217 ;; Delete the section of syms_of_... where we initialize the symbols. | |
218 (search-forward "\n /\*&&& init symbols here &&&*\/\n") | |
219 (let ((start (point))) | |
220 (while (looking-at "^ Q") | |
221 (forward-line 2)) | |
222 (kill-region start (point))) | |
223 ;; Write a new symbol initialization section. | |
224 (while symbol-list | |
225 (insert (format " %s = intern (\"" (car symbol-list))) | |
226 (let ((start (point))) | |
227 (insert (substring (car symbol-list) 1)) | |
228 (subst-char-in-region start (point) ?_ ?-)) | |
229 (insert (format "\");\n staticpro (&%s);\n" (car symbol-list))) | |
230 (setq symbol-list (cdr symbol-list))))) | |
231 | |
232 */ | |
233 | |
234 /*&&& symbols declared here &&&*/ | |
235 Lisp_Object Qauto_raise; | |
236 Lisp_Object Qauto_lower; | |
237 Lisp_Object Qbar; | |
238 Lisp_Object Qborder_color; | |
239 Lisp_Object Qborder_width; | |
240 Lisp_Object Qbox; | |
241 Lisp_Object Qcursor_color; | |
242 Lisp_Object Qcursor_type; | |
243 Lisp_Object Qgeometry; | |
244 Lisp_Object Qicon_left; | |
245 Lisp_Object Qicon_top; | |
246 Lisp_Object Qicon_type; | |
247 Lisp_Object Qicon_name; | |
248 Lisp_Object Qinternal_border_width; | |
249 Lisp_Object Qleft; | |
16259
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
250 Lisp_Object Qright; |
13434 | 251 Lisp_Object Qmouse_color; |
252 Lisp_Object Qnone; | |
253 Lisp_Object Qparent_id; | |
254 Lisp_Object Qscroll_bar_width; | |
255 Lisp_Object Qsuppress_icon; | |
256 Lisp_Object Qundefined_color; | |
257 Lisp_Object Qvertical_scroll_bars; | |
258 Lisp_Object Qvisibility; | |
259 Lisp_Object Qwindow_id; | |
260 Lisp_Object Qx_frame_parameter; | |
261 Lisp_Object Qx_resource_name; | |
262 Lisp_Object Quser_position; | |
263 Lisp_Object Quser_size; | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
264 Lisp_Object Qscreen_gamma; |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
265 Lisp_Object Qline_spacing; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
266 Lisp_Object Qcenter; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
267 Lisp_Object Qhyper; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
268 Lisp_Object Qsuper; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
269 Lisp_Object Qmeta; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
270 Lisp_Object Qalt; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
271 Lisp_Object Qctrl; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
272 Lisp_Object Qcontrol; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
273 Lisp_Object Qshift; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
274 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
275 Lisp_Object Qw32_charset_ansi; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
276 Lisp_Object Qw32_charset_default; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
277 Lisp_Object Qw32_charset_symbol; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
278 Lisp_Object Qw32_charset_shiftjis; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
279 Lisp_Object Qw32_charset_hangul; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
280 Lisp_Object Qw32_charset_gb2312; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
281 Lisp_Object Qw32_charset_chinesebig5; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
282 Lisp_Object Qw32_charset_oem; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
283 |
31110 | 284 #ifndef JOHAB_CHARSET |
285 #define JOHAB_CHARSET 130 | |
286 #endif | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
287 #ifdef JOHAB_CHARSET |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
288 Lisp_Object Qw32_charset_easteurope; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
289 Lisp_Object Qw32_charset_turkish; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
290 Lisp_Object Qw32_charset_baltic; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
291 Lisp_Object Qw32_charset_russian; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
292 Lisp_Object Qw32_charset_arabic; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
293 Lisp_Object Qw32_charset_greek; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
294 Lisp_Object Qw32_charset_hebrew; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
295 Lisp_Object Qw32_charset_thai; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
296 Lisp_Object Qw32_charset_johab; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
297 Lisp_Object Qw32_charset_mac; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
298 #endif |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
299 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
300 #ifdef UNICODE_CHARSET |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
301 Lisp_Object Qw32_charset_unicode; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
302 #endif |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
303 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
304 extern Lisp_Object Qtop; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
305 extern Lisp_Object Qdisplay; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
306 extern Lisp_Object Qtool_bar_lines; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
307 |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
308 /* State variables for emulating a three button mouse. */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
309 #define LMOUSE 1 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
310 #define MMOUSE 2 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
311 #define RMOUSE 4 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
312 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
313 static int button_state = 0; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
314 static W32Msg saved_mouse_button_msg; |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
315 static unsigned mouse_button_timer; /* non-zero when timer is active */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
316 static W32Msg saved_mouse_move_msg; |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
317 static unsigned mouse_move_timer; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
318 |
21874
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
319 /* W95 mousewheel handler */ |
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
320 unsigned int msh_mousewheel = 0; |
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
321 |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
322 #define MOUSE_BUTTON_ID 1 |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
323 #define MOUSE_MOVE_ID 2 |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
324 |
13434 | 325 /* The below are defined in frame.c. */ |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
326 |
13434 | 327 extern Lisp_Object Qheight, Qminibuffer, Qname, Qonly, Qwidth; |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
328 extern Lisp_Object Qunsplittable, Qmenu_bar_lines, Qbuffer_predicate, Qtitle; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
329 extern Lisp_Object Qtool_bar_lines; |
13434 | 330 |
331 extern Lisp_Object Vwindow_system_version; | |
332 | |
22625
e7bd87148368
(Fx_list_fonts): Bring arglist into sync with xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
22078
diff
changeset
|
333 Lisp_Object Qface_set_after_frame_default; |
e7bd87148368
(Fx_list_fonts): Bring arglist into sync with xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
22078
diff
changeset
|
334 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
335 /* From w32term.c. */ |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
336 extern Lisp_Object Vw32_num_mouse_buttons; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
337 extern Lisp_Object Vw32_recognize_altgr; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
338 |
13434 | 339 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
340 /* Error if we are not connected to MS-Windows. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
341 void |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
342 check_w32 () |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
343 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
344 if (! w32_in_use) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
345 error ("MS-Windows not in use or not initialized"); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
346 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
347 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
348 /* Nonzero if we can use mouse menus. |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
349 You should not call this unless HAVE_MENUS is defined. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
350 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
351 int |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
352 have_menus_p () |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
353 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
354 return w32_in_use; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
355 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
356 |
13434 | 357 /* Extract a frame as a FRAME_PTR, defaulting to the selected frame |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
358 and checking validity for W32. */ |
13434 | 359 |
360 FRAME_PTR | |
361 check_x_frame (frame) | |
362 Lisp_Object frame; | |
363 { | |
364 FRAME_PTR f; | |
365 | |
366 if (NILP (frame)) | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
367 frame = selected_frame; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
368 CHECK_LIVE_FRAME (frame, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
369 f = XFRAME (frame); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
370 if (! FRAME_W32_P (f)) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
371 error ("non-w32 frame used"); |
13434 | 372 return f; |
373 } | |
374 | |
375 /* Let the user specify an display with a frame. | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
376 nil stands for the selected frame--or, if that is not a w32 frame, |
13434 | 377 the first display on the list. */ |
378 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
379 static struct w32_display_info * |
13434 | 380 check_x_display_info (frame) |
381 Lisp_Object frame; | |
382 { | |
383 if (NILP (frame)) | |
384 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
385 struct frame *sf = XFRAME (selected_frame); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
386 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
387 if (FRAME_W32_P (sf) && FRAME_LIVE_P (sf)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
388 return FRAME_W32_DISPLAY_INFO (sf); |
13434 | 389 else |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
390 return &one_w32_display_info; |
13434 | 391 } |
392 else if (STRINGP (frame)) | |
393 return x_display_info_for_name (frame); | |
394 else | |
395 { | |
396 FRAME_PTR f; | |
397 | |
398 CHECK_LIVE_FRAME (frame, 0); | |
399 f = XFRAME (frame); | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
400 if (! FRAME_W32_P (f)) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
401 error ("non-w32 frame used"); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
402 return FRAME_W32_DISPLAY_INFO (f); |
13434 | 403 } |
404 } | |
405 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
406 /* Return the Emacs frame-object corresponding to an w32 window. |
13434 | 407 It could be the frame's main window or an icon window. */ |
408 | |
409 /* This function can be called during GC, so use GC_xxx type test macros. */ | |
410 | |
411 struct frame * | |
412 x_window_to_frame (dpyinfo, wdesc) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
413 struct w32_display_info *dpyinfo; |
13434 | 414 HWND wdesc; |
415 { | |
416 Lisp_Object tail, frame; | |
417 struct frame *f; | |
418 | |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
419 for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail)) |
13434 | 420 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
421 frame = XCAR (tail); |
13434 | 422 if (!GC_FRAMEP (frame)) |
423 continue; | |
424 f = XFRAME (frame); | |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
25646
diff
changeset
|
425 if (!FRAME_W32_P (f) || FRAME_W32_DISPLAY_INFO (f) != dpyinfo) |
13434 | 426 continue; |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
427 if (f->output_data.w32->busy_window == wdesc) |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
428 return f; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
429 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
430 /* NTEMACS_TODO: Check tooltips when supported. */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
431 if (FRAME_W32_WINDOW (f) == wdesc) |
13434 | 432 return f; |
433 } | |
434 return 0; | |
435 } | |
436 | |
437 | |
438 | |
439 /* Code to deal with bitmaps. Bitmaps are referenced by their bitmap | |
440 id, which is just an int that this section returns. Bitmaps are | |
441 reference counted so they can be shared among frames. | |
442 | |
443 Bitmap indices are guaranteed to be > 0, so a negative number can | |
444 be used to indicate no bitmap. | |
445 | |
446 If you use x_create_bitmap_from_data, then you must keep track of | |
447 the bitmaps yourself. That is, creating a bitmap from the same | |
448 data more than once will not be caught. */ | |
449 | |
450 | |
451 /* Functions to access the contents of a bitmap, given an id. */ | |
452 | |
453 int | |
454 x_bitmap_height (f, id) | |
455 FRAME_PTR f; | |
456 int id; | |
457 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
458 return FRAME_W32_DISPLAY_INFO (f)->bitmaps[id - 1].height; |
13434 | 459 } |
460 | |
461 int | |
462 x_bitmap_width (f, id) | |
463 FRAME_PTR f; | |
464 int id; | |
465 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
466 return FRAME_W32_DISPLAY_INFO (f)->bitmaps[id - 1].width; |
13434 | 467 } |
468 | |
469 int | |
470 x_bitmap_pixmap (f, id) | |
471 FRAME_PTR f; | |
472 int id; | |
473 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
474 return (int) FRAME_W32_DISPLAY_INFO (f)->bitmaps[id - 1].pixmap; |
13434 | 475 } |
476 | |
477 | |
478 /* Allocate a new bitmap record. Returns index of new record. */ | |
479 | |
480 static int | |
481 x_allocate_bitmap_record (f) | |
482 FRAME_PTR f; | |
483 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
484 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
13434 | 485 int i; |
486 | |
487 if (dpyinfo->bitmaps == NULL) | |
488 { | |
489 dpyinfo->bitmaps_size = 10; | |
490 dpyinfo->bitmaps | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
491 = (struct w32_bitmap_record *) xmalloc (dpyinfo->bitmaps_size * sizeof (struct w32_bitmap_record)); |
13434 | 492 dpyinfo->bitmaps_last = 1; |
493 return 1; | |
494 } | |
495 | |
496 if (dpyinfo->bitmaps_last < dpyinfo->bitmaps_size) | |
497 return ++dpyinfo->bitmaps_last; | |
498 | |
499 for (i = 0; i < dpyinfo->bitmaps_size; ++i) | |
500 if (dpyinfo->bitmaps[i].refcount == 0) | |
501 return i + 1; | |
502 | |
503 dpyinfo->bitmaps_size *= 2; | |
504 dpyinfo->bitmaps | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
505 = (struct w32_bitmap_record *) xrealloc (dpyinfo->bitmaps, |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
506 dpyinfo->bitmaps_size * sizeof (struct w32_bitmap_record)); |
13434 | 507 return ++dpyinfo->bitmaps_last; |
508 } | |
509 | |
510 /* Add one reference to the reference count of the bitmap with id ID. */ | |
511 | |
512 void | |
513 x_reference_bitmap (f, id) | |
514 FRAME_PTR f; | |
515 int id; | |
516 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
517 ++FRAME_W32_DISPLAY_INFO (f)->bitmaps[id - 1].refcount; |
13434 | 518 } |
519 | |
520 /* Create a bitmap for frame F from a HEIGHT x WIDTH array of bits at BITS. */ | |
521 | |
522 int | |
523 x_create_bitmap_from_data (f, bits, width, height) | |
524 struct frame *f; | |
525 char *bits; | |
526 unsigned int width, height; | |
527 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
528 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
13434 | 529 Pixmap bitmap; |
530 int id; | |
531 | |
532 bitmap = CreateBitmap (width, height, | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
533 FRAME_W32_DISPLAY_INFO (XFRAME (frame))->n_planes, |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
534 FRAME_W32_DISPLAY_INFO (XFRAME (frame))->n_cbits, |
13434 | 535 bits); |
536 | |
537 if (! bitmap) | |
538 return -1; | |
539 | |
540 id = x_allocate_bitmap_record (f); | |
541 dpyinfo->bitmaps[id - 1].pixmap = bitmap; | |
542 dpyinfo->bitmaps[id - 1].file = NULL; | |
543 dpyinfo->bitmaps[id - 1].hinst = NULL; | |
544 dpyinfo->bitmaps[id - 1].refcount = 1; | |
545 dpyinfo->bitmaps[id - 1].depth = 1; | |
546 dpyinfo->bitmaps[id - 1].height = height; | |
547 dpyinfo->bitmaps[id - 1].width = width; | |
548 | |
549 return id; | |
550 } | |
551 | |
552 /* Create bitmap from file FILE for frame F. */ | |
553 | |
554 int | |
555 x_create_bitmap_from_file (f, file) | |
556 struct frame *f; | |
557 Lisp_Object file; | |
558 { | |
559 return -1; | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
560 #if 0 /* NTEMACS_TODO : bitmap support */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
561 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
13434 | 562 unsigned int width, height; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
563 HBITMAP bitmap; |
13434 | 564 int xhot, yhot, result, id; |
565 Lisp_Object found; | |
566 int fd; | |
567 char *filename; | |
568 HINSTANCE hinst; | |
569 | |
570 /* Look for an existing bitmap with the same name. */ | |
571 for (id = 0; id < dpyinfo->bitmaps_last; ++id) | |
572 { | |
573 if (dpyinfo->bitmaps[id].refcount | |
574 && dpyinfo->bitmaps[id].file | |
575 && !strcmp (dpyinfo->bitmaps[id].file, (char *) XSTRING (file)->data)) | |
576 { | |
577 ++dpyinfo->bitmaps[id].refcount; | |
578 return id + 1; | |
579 } | |
580 } | |
581 | |
582 /* Search bitmap-file-path for the file, if appropriate. */ | |
583 fd = openp (Vx_bitmap_file_path, file, "", &found, 0); | |
584 if (fd < 0) | |
585 return -1; | |
23407
4587be644789
(x_create_bitmap_from_file): Skip special files.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23314
diff
changeset
|
586 /* LoadLibraryEx won't handle special files handled by Emacs handler. */ |
4587be644789
(x_create_bitmap_from_file): Skip special files.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23314
diff
changeset
|
587 if (fd == 0) |
4587be644789
(x_create_bitmap_from_file): Skip special files.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23314
diff
changeset
|
588 return -1; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
589 emacs_close (fd); |
13434 | 590 |
591 filename = (char *) XSTRING (found)->data; | |
592 | |
593 hinst = LoadLibraryEx (filename, NULL, LOAD_LIBRARY_AS_DATAFILE); | |
594 | |
595 if (hinst == NULL) | |
596 return -1; | |
597 | |
598 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
599 result = XReadBitmapFile (FRAME_W32_DISPLAY (f), FRAME_W32_WINDOW (f), |
13434 | 600 filename, &width, &height, &bitmap, &xhot, &yhot); |
601 if (result != BitmapSuccess) | |
602 return -1; | |
603 | |
604 id = x_allocate_bitmap_record (f); | |
605 dpyinfo->bitmaps[id - 1].pixmap = bitmap; | |
606 dpyinfo->bitmaps[id - 1].refcount = 1; | |
607 dpyinfo->bitmaps[id - 1].file = (char *) xmalloc (XSTRING (file)->size + 1); | |
608 dpyinfo->bitmaps[id - 1].depth = 1; | |
609 dpyinfo->bitmaps[id - 1].height = height; | |
610 dpyinfo->bitmaps[id - 1].width = width; | |
611 strcpy (dpyinfo->bitmaps[id - 1].file, XSTRING (file)->data); | |
612 | |
613 return id; | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
614 #endif /* NTEMACS_TODO */ |
13434 | 615 } |
616 | |
617 /* Remove reference to bitmap with id number ID. */ | |
618 | |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
619 void |
13434 | 620 x_destroy_bitmap (f, id) |
621 FRAME_PTR f; | |
622 int id; | |
623 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
624 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
13434 | 625 |
626 if (id > 0) | |
627 { | |
628 --dpyinfo->bitmaps[id - 1].refcount; | |
629 if (dpyinfo->bitmaps[id - 1].refcount == 0) | |
630 { | |
631 BLOCK_INPUT; | |
632 DeleteObject (dpyinfo->bitmaps[id - 1].pixmap); | |
633 if (dpyinfo->bitmaps[id - 1].file) | |
634 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
635 xfree (dpyinfo->bitmaps[id - 1].file); |
13434 | 636 dpyinfo->bitmaps[id - 1].file = NULL; |
637 } | |
638 UNBLOCK_INPUT; | |
639 } | |
640 } | |
641 } | |
642 | |
643 /* Free all the bitmaps for the display specified by DPYINFO. */ | |
644 | |
645 static void | |
646 x_destroy_all_bitmaps (dpyinfo) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
647 struct w32_display_info *dpyinfo; |
13434 | 648 { |
649 int i; | |
650 for (i = 0; i < dpyinfo->bitmaps_last; i++) | |
651 if (dpyinfo->bitmaps[i].refcount > 0) | |
652 { | |
653 DeleteObject (dpyinfo->bitmaps[i].pixmap); | |
654 if (dpyinfo->bitmaps[i].file) | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
655 xfree (dpyinfo->bitmaps[i].file); |
13434 | 656 } |
657 dpyinfo->bitmaps_last = 0; | |
658 } | |
659 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
660 /* Connect the frame-parameter names for W32 frames |
13434 | 661 to the ways of passing the parameter values to the window system. |
662 | |
663 The name of a parameter, as a Lisp symbol, | |
664 has an `x-frame-parameter' property which is an integer in Lisp | |
665 but can be interpreted as an `enum x_frame_parm' in C. */ | |
666 | |
667 enum x_frame_parm | |
668 { | |
669 X_PARM_FOREGROUND_COLOR, | |
670 X_PARM_BACKGROUND_COLOR, | |
671 X_PARM_MOUSE_COLOR, | |
672 X_PARM_CURSOR_COLOR, | |
673 X_PARM_BORDER_COLOR, | |
674 X_PARM_ICON_TYPE, | |
675 X_PARM_FONT, | |
676 X_PARM_BORDER_WIDTH, | |
677 X_PARM_INTERNAL_BORDER_WIDTH, | |
678 X_PARM_NAME, | |
679 X_PARM_AUTORAISE, | |
680 X_PARM_AUTOLOWER, | |
681 X_PARM_VERT_SCROLL_BAR, | |
682 X_PARM_VISIBILITY, | |
683 X_PARM_MENU_BAR_LINES | |
684 }; | |
685 | |
686 | |
687 struct x_frame_parm_table | |
688 { | |
689 char *name; | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
690 void (*setter) P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
13434 | 691 }; |
692 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
693 /* NTEMACS_TODO: Native Input Method support; see x_create_im. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
694 void x_set_foreground_color P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
695 static void x_set_line_spacing P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
696 void x_set_background_color P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
697 void x_set_mouse_color P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
698 void x_set_cursor_color P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
699 void x_set_border_color P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
700 void x_set_cursor_type P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
701 void x_set_icon_type P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
702 void x_set_icon_name P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
703 void x_set_font P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
704 void x_set_border_width P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
705 void x_set_internal_border_width P_ ((struct frame *, Lisp_Object, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
706 Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
707 void x_explicitly_set_name P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
708 void x_set_autoraise P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
709 void x_set_autolower P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
710 void x_set_vertical_scroll_bars P_ ((struct frame *, Lisp_Object, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
711 Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
712 void x_set_visibility P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
713 void x_set_menu_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
714 void x_set_scroll_bar_width P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
715 void x_set_title P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
716 void x_set_unsplittable P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
717 void x_set_tool_bar_lines P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
718 static void x_set_screen_gamma P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
13434 | 719 |
720 static struct x_frame_parm_table x_frame_parms[] = | |
721 { | |
722 "auto-raise", x_set_autoraise, | |
723 "auto-lower", x_set_autolower, | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
724 "background-color", x_set_background_color, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
725 "border-color", x_set_border_color, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
726 "border-width", x_set_border_width, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
727 "cursor-color", x_set_cursor_color, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
728 "cursor-type", x_set_cursor_type, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
729 "font", x_set_font, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
730 "foreground-color", x_set_foreground_color, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
731 "icon-name", x_set_icon_name, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
732 "icon-type", x_set_icon_type, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
733 "internal-border-width", x_set_internal_border_width, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
734 "menu-bar-lines", x_set_menu_bar_lines, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
735 "mouse-color", x_set_mouse_color, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
736 "name", x_explicitly_set_name, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
737 "scroll-bar-width", x_set_scroll_bar_width, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
738 "title", x_set_title, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
739 "unsplittable", x_set_unsplittable, |
13434 | 740 "vertical-scroll-bars", x_set_vertical_scroll_bars, |
741 "visibility", x_set_visibility, | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
742 "tool-bar-lines", x_set_tool_bar_lines, |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
743 "screen-gamma", x_set_screen_gamma, |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
744 "line-spacing", x_set_line_spacing |
13434 | 745 }; |
746 | |
747 /* Attach the `x-frame-parameter' properties to | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
748 the Lisp symbol names of parameters relevant to W32. */ |
13434 | 749 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
750 void |
13434 | 751 init_x_parm_symbols () |
752 { | |
753 int i; | |
754 | |
755 for (i = 0; i < sizeof (x_frame_parms) / sizeof (x_frame_parms[0]); i++) | |
756 Fput (intern (x_frame_parms[i].name), Qx_frame_parameter, | |
757 make_number (i)); | |
758 } | |
759 | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
760 /* Change the parameters of frame F as specified by ALIST. |
13434 | 761 If a parameter is not specially recognized, do nothing; |
762 otherwise call the `x_set_...' function for that parameter. */ | |
763 | |
764 void | |
765 x_set_frame_parameters (f, alist) | |
766 FRAME_PTR f; | |
767 Lisp_Object alist; | |
768 { | |
769 Lisp_Object tail; | |
770 | |
771 /* If both of these parameters are present, it's more efficient to | |
772 set them both at once. So we wait until we've looked at the | |
773 entire list before we set them. */ | |
16106
fdd1b2ade15d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16089
diff
changeset
|
774 int width, height; |
13434 | 775 |
776 /* Same here. */ | |
777 Lisp_Object left, top; | |
778 | |
779 /* Same with these. */ | |
780 Lisp_Object icon_left, icon_top; | |
781 | |
782 /* Record in these vectors all the parms specified. */ | |
783 Lisp_Object *parms; | |
784 Lisp_Object *values; | |
25289
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
785 int i, p; |
13434 | 786 int left_no_change = 0, top_no_change = 0; |
787 int icon_left_no_change = 0, icon_top_no_change = 0; | |
788 | |
24211
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
789 struct gcpro gcpro1, gcpro2; |
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
790 |
13434 | 791 i = 0; |
792 for (tail = alist; CONSP (tail); tail = Fcdr (tail)) | |
793 i++; | |
794 | |
795 parms = (Lisp_Object *) alloca (i * sizeof (Lisp_Object)); | |
796 values = (Lisp_Object *) alloca (i * sizeof (Lisp_Object)); | |
797 | |
798 /* Extract parm names and values into those vectors. */ | |
799 | |
800 i = 0; | |
801 for (tail = alist; CONSP (tail); tail = Fcdr (tail)) | |
802 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
803 Lisp_Object elt; |
13434 | 804 |
805 elt = Fcar (tail); | |
806 parms[i] = Fcar (elt); | |
807 values[i] = Fcdr (elt); | |
808 i++; | |
809 } | |
24211
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
810 /* TAIL and ALIST are not used again below here. */ |
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
811 alist = tail = Qnil; |
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
812 |
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
813 GCPRO2 (*parms, *values); |
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
814 gcpro1.nvars = i; |
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
815 gcpro2.nvars = i; |
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
816 |
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
817 /* There is no need to gcpro LEFT, TOP, ICON_LEFT, or ICON_TOP, |
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
818 because their values appear in VALUES and strings are not valid. */ |
16106
fdd1b2ade15d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16089
diff
changeset
|
819 top = left = Qunbound; |
13434 | 820 icon_left = icon_top = Qunbound; |
821 | |
16106
fdd1b2ade15d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16089
diff
changeset
|
822 /* Provide default values for HEIGHT and WIDTH. */ |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
823 if (FRAME_NEW_WIDTH (f)) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
824 width = FRAME_NEW_WIDTH (f); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
825 else |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
826 width = FRAME_WIDTH (f); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
827 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
828 if (FRAME_NEW_HEIGHT (f)) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
829 height = FRAME_NEW_HEIGHT (f); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
830 else |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
831 height = FRAME_HEIGHT (f); |
16106
fdd1b2ade15d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16089
diff
changeset
|
832 |
25289
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
833 /* Process foreground_color and background_color before anything else. |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
834 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:
25235
diff
changeset
|
835 cursor_color) are dependent upon them. */ |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
836 for (p = 0; p < i; p++) |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
837 { |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
838 Lisp_Object prop, val; |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
839 |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
840 prop = parms[p]; |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
841 val = values[p]; |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
842 if (EQ (prop, Qforeground_color) || EQ (prop, Qbackground_color)) |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
843 { |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
844 register Lisp_Object param_index, old_value; |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
845 |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
846 param_index = Fget (prop, Qx_frame_parameter); |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
847 old_value = get_frame_param (f, prop); |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
848 store_frame_param (f, prop, val); |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
849 if (NATNUMP (param_index) |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
850 && (XFASTINT (param_index) |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
851 < sizeof (x_frame_parms)/sizeof (x_frame_parms[0]))) |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
852 (*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:
25235
diff
changeset
|
853 } |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
854 } |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
855 |
13434 | 856 /* Now process them in reverse of specified order. */ |
857 for (i--; i >= 0; i--) | |
858 { | |
859 Lisp_Object prop, val; | |
860 | |
861 prop = parms[i]; | |
862 val = values[i]; | |
863 | |
16106
fdd1b2ade15d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16089
diff
changeset
|
864 if (EQ (prop, Qwidth) && NUMBERP (val)) |
fdd1b2ade15d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16089
diff
changeset
|
865 width = XFASTINT (val); |
fdd1b2ade15d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16089
diff
changeset
|
866 else if (EQ (prop, Qheight) && NUMBERP (val)) |
fdd1b2ade15d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16089
diff
changeset
|
867 height = XFASTINT (val); |
13434 | 868 else if (EQ (prop, Qtop)) |
869 top = val; | |
870 else if (EQ (prop, Qleft)) | |
871 left = val; | |
872 else if (EQ (prop, Qicon_top)) | |
873 icon_top = val; | |
874 else if (EQ (prop, Qicon_left)) | |
875 icon_left = val; | |
25289
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
876 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:
25235
diff
changeset
|
877 /* Processed above. */ |
64b742df49ca
(x_set_frame_parameters): Set foreground and
Geoff Voelker <voelker@cs.washington.edu>
parents:
25235
diff
changeset
|
878 continue; |
13434 | 879 else |
880 { | |
881 register Lisp_Object param_index, old_value; | |
882 | |
883 param_index = Fget (prop, Qx_frame_parameter); | |
884 old_value = get_frame_param (f, prop); | |
885 store_frame_param (f, prop, val); | |
886 if (NATNUMP (param_index) | |
887 && (XFASTINT (param_index) | |
888 < sizeof (x_frame_parms)/sizeof (x_frame_parms[0]))) | |
14353 | 889 (*x_frame_parms[XINT (param_index)].setter)(f, val, old_value); |
13434 | 890 } |
891 } | |
892 | |
893 /* Don't die if just one of these was set. */ | |
894 if (EQ (left, Qunbound)) | |
895 { | |
896 left_no_change = 1; | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
897 if (f->output_data.w32->left_pos < 0) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
898 left = Fcons (Qplus, Fcons (make_number (f->output_data.w32->left_pos), Qnil)); |
13434 | 899 else |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
900 XSETINT (left, f->output_data.w32->left_pos); |
13434 | 901 } |
902 if (EQ (top, Qunbound)) | |
903 { | |
904 top_no_change = 1; | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
905 if (f->output_data.w32->top_pos < 0) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
906 top = Fcons (Qplus, Fcons (make_number (f->output_data.w32->top_pos), Qnil)); |
13434 | 907 else |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
908 XSETINT (top, f->output_data.w32->top_pos); |
13434 | 909 } |
910 | |
911 /* If one of the icon positions was not set, preserve or default it. */ | |
912 if (EQ (icon_left, Qunbound) || ! INTEGERP (icon_left)) | |
913 { | |
914 icon_left_no_change = 1; | |
915 icon_left = Fcdr (Fassq (Qicon_left, f->param_alist)); | |
916 if (NILP (icon_left)) | |
917 XSETINT (icon_left, 0); | |
918 } | |
919 if (EQ (icon_top, Qunbound) || ! INTEGERP (icon_top)) | |
920 { | |
921 icon_top_no_change = 1; | |
922 icon_top = Fcdr (Fassq (Qicon_top, f->param_alist)); | |
923 if (NILP (icon_top)) | |
924 XSETINT (icon_top, 0); | |
925 } | |
926 | |
927 /* Don't set these parameters unless they've been explicitly | |
928 specified. The window might be mapped or resized while we're in | |
929 this function, and we don't want to override that unless the lisp | |
930 code has asked for it. | |
931 | |
932 Don't set these parameters unless they actually differ from the | |
933 window's current parameters; the window may not actually exist | |
934 yet. */ | |
935 { | |
936 Lisp_Object frame; | |
937 | |
938 check_frame_size (f, &height, &width); | |
939 | |
940 XSETFRAME (frame, f); | |
941 | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
942 if (width != FRAME_WIDTH (f) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
943 || height != FRAME_HEIGHT (f) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
944 || FRAME_NEW_HEIGHT (f) || FRAME_NEW_WIDTH (f)) |
16106
fdd1b2ade15d
(x_set_frame_parameters): Make height and width ints.
Richard M. Stallman <rms@gnu.org>
parents:
16089
diff
changeset
|
945 Fset_frame_size (frame, make_number (width), make_number (height)); |
13434 | 946 |
947 if ((!NILP (left) || !NILP (top)) | |
948 && ! (left_no_change && top_no_change) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
949 && ! (NUMBERP (left) && XINT (left) == f->output_data.w32->left_pos |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
950 && NUMBERP (top) && XINT (top) == f->output_data.w32->top_pos)) |
13434 | 951 { |
952 int leftpos = 0; | |
953 int toppos = 0; | |
954 | |
955 /* Record the signs. */ | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
956 f->output_data.w32->size_hint_flags &= ~ (XNegative | YNegative); |
13434 | 957 if (EQ (left, Qminus)) |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
958 f->output_data.w32->size_hint_flags |= XNegative; |
13434 | 959 else if (INTEGERP (left)) |
960 { | |
961 leftpos = XINT (left); | |
962 if (leftpos < 0) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
963 f->output_data.w32->size_hint_flags |= XNegative; |
13434 | 964 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
965 else if (CONSP (left) && EQ (XCAR (left), Qminus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
966 && CONSP (XCDR (left)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
967 && INTEGERP (XCAR (XCDR (left)))) |
13434 | 968 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
969 leftpos = - XINT (XCAR (XCDR (left))); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
970 f->output_data.w32->size_hint_flags |= XNegative; |
13434 | 971 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
972 else if (CONSP (left) && EQ (XCAR (left), Qplus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
973 && CONSP (XCDR (left)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
974 && INTEGERP (XCAR (XCDR (left)))) |
13434 | 975 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
976 leftpos = XINT (XCAR (XCDR (left))); |
13434 | 977 } |
978 | |
979 if (EQ (top, Qminus)) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
980 f->output_data.w32->size_hint_flags |= YNegative; |
13434 | 981 else if (INTEGERP (top)) |
982 { | |
983 toppos = XINT (top); | |
984 if (toppos < 0) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
985 f->output_data.w32->size_hint_flags |= YNegative; |
13434 | 986 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
987 else if (CONSP (top) && EQ (XCAR (top), Qminus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
988 && CONSP (XCDR (top)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
989 && INTEGERP (XCAR (XCDR (top)))) |
13434 | 990 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
991 toppos = - XINT (XCAR (XCDR (top))); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
992 f->output_data.w32->size_hint_flags |= YNegative; |
13434 | 993 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
994 else if (CONSP (top) && EQ (XCAR (top), Qplus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
995 && CONSP (XCDR (top)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
996 && INTEGERP (XCAR (XCDR (top)))) |
13434 | 997 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
998 toppos = XINT (XCAR (XCDR (top))); |
13434 | 999 } |
1000 | |
1001 | |
1002 /* Store the numeric value of the position. */ | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1003 f->output_data.w32->top_pos = toppos; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1004 f->output_data.w32->left_pos = leftpos; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1005 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1006 f->output_data.w32->win_gravity = NorthWestGravity; |
13434 | 1007 |
1008 /* Actually set that position, and convert to absolute. */ | |
1009 x_set_offset (f, leftpos, toppos, -1); | |
1010 } | |
1011 | |
1012 if ((!NILP (icon_left) || !NILP (icon_top)) | |
1013 && ! (icon_left_no_change && icon_top_no_change)) | |
1014 x_wm_set_icon_position (f, XINT (icon_left), XINT (icon_top)); | |
1015 } | |
24211
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
1016 |
9ecc7b851682
(x_set_frame_parameters): gcpro as needed.
Richard M. Stallman <rms@gnu.org>
parents:
24206
diff
changeset
|
1017 UNGCPRO; |
13434 | 1018 } |
1019 | |
1020 /* Store the screen positions of frame F into XPTR and YPTR. | |
1021 These are the positions of the containing window manager window, | |
1022 not Emacs's own window. */ | |
1023 | |
1024 void | |
1025 x_real_positions (f, xptr, yptr) | |
1026 FRAME_PTR f; | |
1027 int *xptr, *yptr; | |
1028 { | |
1029 POINT pt; | |
14353 | 1030 |
1031 { | |
1032 RECT rect; | |
13434 | 1033 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1034 GetClientRect(FRAME_W32_WINDOW(f), &rect); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1035 AdjustWindowRect(&rect, f->output_data.w32->dwStyle, FRAME_EXTERNAL_MENU_BAR(f)); |
13434 | 1036 |
14353 | 1037 pt.x = rect.left; |
1038 pt.y = rect.top; | |
1039 } | |
1040 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1041 ClientToScreen (FRAME_W32_WINDOW(f), &pt); |
13434 | 1042 |
1043 *xptr = pt.x; | |
1044 *yptr = pt.y; | |
1045 } | |
1046 | |
1047 /* Insert a description of internally-recorded parameters of frame X | |
1048 into the parameter alist *ALISTPTR that is to be given to the user. | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1049 Only parameters that are specific to W32 |
13434 | 1050 and whose values are not correctly recorded in the frame's |
1051 param_alist need to be considered here. */ | |
1052 | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1053 void |
13434 | 1054 x_report_frame_params (f, alistptr) |
1055 struct frame *f; | |
1056 Lisp_Object *alistptr; | |
1057 { | |
1058 char buf[16]; | |
1059 Lisp_Object tem; | |
1060 | |
1061 /* Represent negative positions (off the top or left screen edge) | |
1062 in a way that Fmodify_frame_parameters will understand correctly. */ | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1063 XSETINT (tem, f->output_data.w32->left_pos); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1064 if (f->output_data.w32->left_pos >= 0) |
13434 | 1065 store_in_alist (alistptr, Qleft, tem); |
1066 else | |
1067 store_in_alist (alistptr, Qleft, Fcons (Qplus, Fcons (tem, Qnil))); | |
1068 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1069 XSETINT (tem, f->output_data.w32->top_pos); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1070 if (f->output_data.w32->top_pos >= 0) |
13434 | 1071 store_in_alist (alistptr, Qtop, tem); |
1072 else | |
1073 store_in_alist (alistptr, Qtop, Fcons (Qplus, Fcons (tem, Qnil))); | |
1074 | |
1075 store_in_alist (alistptr, Qborder_width, | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1076 make_number (f->output_data.w32->border_width)); |
13434 | 1077 store_in_alist (alistptr, Qinternal_border_width, |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1078 make_number (f->output_data.w32->internal_border_width)); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1079 sprintf (buf, "%ld", (long) FRAME_W32_WINDOW (f)); |
13434 | 1080 store_in_alist (alistptr, Qwindow_id, |
1081 build_string (buf)); | |
1082 store_in_alist (alistptr, Qicon_name, f->icon_name); | |
1083 FRAME_SAMPLE_VISIBILITY (f); | |
1084 store_in_alist (alistptr, Qvisibility, | |
1085 (FRAME_VISIBLE_P (f) ? Qt | |
1086 : FRAME_ICONIFIED_P (f) ? Qicon : Qnil)); | |
1087 store_in_alist (alistptr, Qdisplay, | |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
1088 XCAR (FRAME_W32_DISPLAY_INFO (f)->name_list_element)); |
13434 | 1089 } |
1090 | |
1091 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1092 DEFUN ("w32-define-rgb-color", Fw32_define_rgb_color, Sw32_define_rgb_color, 4, 4, 0, |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1093 "Convert RGB numbers to a windows color reference and associate with NAME (a string).\n\ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1094 This adds or updates a named color to w32-color-map, making it available for use.\n\ |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1095 The original entry's RGB ref is returned, or nil if the entry is new.") |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1096 (red, green, blue, name) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1097 Lisp_Object red, green, blue, name; |
13434 | 1098 { |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1099 Lisp_Object rgb; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1100 Lisp_Object oldrgb = Qnil; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1101 Lisp_Object entry; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1102 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1103 CHECK_NUMBER (red, 0); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1104 CHECK_NUMBER (green, 0); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1105 CHECK_NUMBER (blue, 0); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1106 CHECK_STRING (name, 0); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1107 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1108 XSET (rgb, Lisp_Int, RGB(XUINT (red), XUINT (green), XUINT (blue))); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1109 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1110 BLOCK_INPUT; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1111 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1112 /* replace existing entry in w32-color-map or add new entry. */ |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1113 entry = Fassoc (name, Vw32_color_map); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1114 if (NILP (entry)) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1115 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1116 entry = Fcons (name, rgb); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1117 Vw32_color_map = Fcons (entry, Vw32_color_map); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1118 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1119 else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1120 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1121 oldrgb = Fcdr (entry); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1122 Fsetcdr (entry, rgb); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1123 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1124 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1125 UNBLOCK_INPUT; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1126 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1127 return (oldrgb); |
13434 | 1128 } |
1129 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1130 DEFUN ("w32-load-color-file", Fw32_load_color_file, Sw32_load_color_file, 1, 1, 0, |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1131 "Create an alist of color entries from an external file (ie. rgb.txt).\n\ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1132 Assign this value to w32-color-map to replace the existing color map.\n\ |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1133 \ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1134 The file should define one named RGB color per line like so:\ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1135 R G B name\n\ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1136 where R,G,B are numbers between 0 and 255 and name is an arbitrary string.") |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1137 (filename) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1138 Lisp_Object filename; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1139 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1140 FILE *fp; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1141 Lisp_Object cmap = Qnil; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1142 Lisp_Object abspath; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1143 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1144 CHECK_STRING (filename, 0); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1145 abspath = Fexpand_file_name (filename, Qnil); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1146 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1147 fp = fopen (XSTRING (filename)->data, "rt"); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1148 if (fp) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1149 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1150 char buf[512]; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1151 int red, green, blue; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1152 int num; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1153 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1154 BLOCK_INPUT; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1155 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1156 while (fgets (buf, sizeof (buf), fp) != NULL) { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1157 if (sscanf (buf, "%u %u %u %n", &red, &green, &blue, &num) == 3) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1158 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1159 char *name = buf + num; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1160 num = strlen (name) - 1; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1161 if (name[num] == '\n') |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1162 name[num] = 0; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1163 cmap = Fcons (Fcons (build_string (name), |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1164 make_number (RGB (red, green, blue))), |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1165 cmap); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1166 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1167 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1168 fclose (fp); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1169 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1170 UNBLOCK_INPUT; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1171 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1172 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1173 return cmap; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1174 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1175 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1176 /* The default colors for the w32 color map */ |
13434 | 1177 typedef struct colormap_t |
1178 { | |
1179 char *name; | |
1180 COLORREF colorref; | |
1181 } colormap_t; | |
1182 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1183 colormap_t w32_color_map[] = |
13434 | 1184 { |
14983
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1185 {"snow" , PALETTERGB (255,250,250)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1186 {"ghost white" , PALETTERGB (248,248,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1187 {"GhostWhite" , PALETTERGB (248,248,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1188 {"white smoke" , PALETTERGB (245,245,245)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1189 {"WhiteSmoke" , PALETTERGB (245,245,245)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1190 {"gainsboro" , PALETTERGB (220,220,220)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1191 {"floral white" , PALETTERGB (255,250,240)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1192 {"FloralWhite" , PALETTERGB (255,250,240)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1193 {"old lace" , PALETTERGB (253,245,230)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1194 {"OldLace" , PALETTERGB (253,245,230)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1195 {"linen" , PALETTERGB (250,240,230)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1196 {"antique white" , PALETTERGB (250,235,215)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1197 {"AntiqueWhite" , PALETTERGB (250,235,215)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1198 {"papaya whip" , PALETTERGB (255,239,213)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1199 {"PapayaWhip" , PALETTERGB (255,239,213)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1200 {"blanched almond" , PALETTERGB (255,235,205)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1201 {"BlanchedAlmond" , PALETTERGB (255,235,205)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1202 {"bisque" , PALETTERGB (255,228,196)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1203 {"peach puff" , PALETTERGB (255,218,185)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1204 {"PeachPuff" , PALETTERGB (255,218,185)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1205 {"navajo white" , PALETTERGB (255,222,173)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1206 {"NavajoWhite" , PALETTERGB (255,222,173)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1207 {"moccasin" , PALETTERGB (255,228,181)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1208 {"cornsilk" , PALETTERGB (255,248,220)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1209 {"ivory" , PALETTERGB (255,255,240)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1210 {"lemon chiffon" , PALETTERGB (255,250,205)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1211 {"LemonChiffon" , PALETTERGB (255,250,205)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1212 {"seashell" , PALETTERGB (255,245,238)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1213 {"honeydew" , PALETTERGB (240,255,240)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1214 {"mint cream" , PALETTERGB (245,255,250)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1215 {"MintCream" , PALETTERGB (245,255,250)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1216 {"azure" , PALETTERGB (240,255,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1217 {"alice blue" , PALETTERGB (240,248,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1218 {"AliceBlue" , PALETTERGB (240,248,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1219 {"lavender" , PALETTERGB (230,230,250)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1220 {"lavender blush" , PALETTERGB (255,240,245)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1221 {"LavenderBlush" , PALETTERGB (255,240,245)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1222 {"misty rose" , PALETTERGB (255,228,225)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1223 {"MistyRose" , PALETTERGB (255,228,225)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1224 {"white" , PALETTERGB (255,255,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1225 {"black" , PALETTERGB ( 0, 0, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1226 {"dark slate gray" , PALETTERGB ( 47, 79, 79)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1227 {"DarkSlateGray" , PALETTERGB ( 47, 79, 79)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1228 {"dark slate grey" , PALETTERGB ( 47, 79, 79)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1229 {"DarkSlateGrey" , PALETTERGB ( 47, 79, 79)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1230 {"dim gray" , PALETTERGB (105,105,105)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1231 {"DimGray" , PALETTERGB (105,105,105)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1232 {"dim grey" , PALETTERGB (105,105,105)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1233 {"DimGrey" , PALETTERGB (105,105,105)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1234 {"slate gray" , PALETTERGB (112,128,144)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1235 {"SlateGray" , PALETTERGB (112,128,144)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1236 {"slate grey" , PALETTERGB (112,128,144)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1237 {"SlateGrey" , PALETTERGB (112,128,144)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1238 {"light slate gray" , PALETTERGB (119,136,153)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1239 {"LightSlateGray" , PALETTERGB (119,136,153)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1240 {"light slate grey" , PALETTERGB (119,136,153)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1241 {"LightSlateGrey" , PALETTERGB (119,136,153)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1242 {"gray" , PALETTERGB (190,190,190)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1243 {"grey" , PALETTERGB (190,190,190)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1244 {"light grey" , PALETTERGB (211,211,211)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1245 {"LightGrey" , PALETTERGB (211,211,211)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1246 {"light gray" , PALETTERGB (211,211,211)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1247 {"LightGray" , PALETTERGB (211,211,211)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1248 {"midnight blue" , PALETTERGB ( 25, 25,112)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1249 {"MidnightBlue" , PALETTERGB ( 25, 25,112)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1250 {"navy" , PALETTERGB ( 0, 0,128)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1251 {"navy blue" , PALETTERGB ( 0, 0,128)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1252 {"NavyBlue" , PALETTERGB ( 0, 0,128)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1253 {"cornflower blue" , PALETTERGB (100,149,237)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1254 {"CornflowerBlue" , PALETTERGB (100,149,237)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1255 {"dark slate blue" , PALETTERGB ( 72, 61,139)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1256 {"DarkSlateBlue" , PALETTERGB ( 72, 61,139)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1257 {"slate blue" , PALETTERGB (106, 90,205)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1258 {"SlateBlue" , PALETTERGB (106, 90,205)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1259 {"medium slate blue" , PALETTERGB (123,104,238)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1260 {"MediumSlateBlue" , PALETTERGB (123,104,238)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1261 {"light slate blue" , PALETTERGB (132,112,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1262 {"LightSlateBlue" , PALETTERGB (132,112,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1263 {"medium blue" , PALETTERGB ( 0, 0,205)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1264 {"MediumBlue" , PALETTERGB ( 0, 0,205)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1265 {"royal blue" , PALETTERGB ( 65,105,225)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1266 {"RoyalBlue" , PALETTERGB ( 65,105,225)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1267 {"blue" , PALETTERGB ( 0, 0,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1268 {"dodger blue" , PALETTERGB ( 30,144,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1269 {"DodgerBlue" , PALETTERGB ( 30,144,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1270 {"deep sky blue" , PALETTERGB ( 0,191,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1271 {"DeepSkyBlue" , PALETTERGB ( 0,191,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1272 {"sky blue" , PALETTERGB (135,206,235)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1273 {"SkyBlue" , PALETTERGB (135,206,235)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1274 {"light sky blue" , PALETTERGB (135,206,250)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1275 {"LightSkyBlue" , PALETTERGB (135,206,250)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1276 {"steel blue" , PALETTERGB ( 70,130,180)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1277 {"SteelBlue" , PALETTERGB ( 70,130,180)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1278 {"light steel blue" , PALETTERGB (176,196,222)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1279 {"LightSteelBlue" , PALETTERGB (176,196,222)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1280 {"light blue" , PALETTERGB (173,216,230)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1281 {"LightBlue" , PALETTERGB (173,216,230)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1282 {"powder blue" , PALETTERGB (176,224,230)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1283 {"PowderBlue" , PALETTERGB (176,224,230)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1284 {"pale turquoise" , PALETTERGB (175,238,238)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1285 {"PaleTurquoise" , PALETTERGB (175,238,238)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1286 {"dark turquoise" , PALETTERGB ( 0,206,209)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1287 {"DarkTurquoise" , PALETTERGB ( 0,206,209)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1288 {"medium turquoise" , PALETTERGB ( 72,209,204)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1289 {"MediumTurquoise" , PALETTERGB ( 72,209,204)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1290 {"turquoise" , PALETTERGB ( 64,224,208)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1291 {"cyan" , PALETTERGB ( 0,255,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1292 {"light cyan" , PALETTERGB (224,255,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1293 {"LightCyan" , PALETTERGB (224,255,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1294 {"cadet blue" , PALETTERGB ( 95,158,160)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1295 {"CadetBlue" , PALETTERGB ( 95,158,160)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1296 {"medium aquamarine" , PALETTERGB (102,205,170)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1297 {"MediumAquamarine" , PALETTERGB (102,205,170)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1298 {"aquamarine" , PALETTERGB (127,255,212)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1299 {"dark green" , PALETTERGB ( 0,100, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1300 {"DarkGreen" , PALETTERGB ( 0,100, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1301 {"dark olive green" , PALETTERGB ( 85,107, 47)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1302 {"DarkOliveGreen" , PALETTERGB ( 85,107, 47)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1303 {"dark sea green" , PALETTERGB (143,188,143)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1304 {"DarkSeaGreen" , PALETTERGB (143,188,143)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1305 {"sea green" , PALETTERGB ( 46,139, 87)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1306 {"SeaGreen" , PALETTERGB ( 46,139, 87)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1307 {"medium sea green" , PALETTERGB ( 60,179,113)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1308 {"MediumSeaGreen" , PALETTERGB ( 60,179,113)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1309 {"light sea green" , PALETTERGB ( 32,178,170)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1310 {"LightSeaGreen" , PALETTERGB ( 32,178,170)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1311 {"pale green" , PALETTERGB (152,251,152)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1312 {"PaleGreen" , PALETTERGB (152,251,152)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1313 {"spring green" , PALETTERGB ( 0,255,127)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1314 {"SpringGreen" , PALETTERGB ( 0,255,127)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1315 {"lawn green" , PALETTERGB (124,252, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1316 {"LawnGreen" , PALETTERGB (124,252, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1317 {"green" , PALETTERGB ( 0,255, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1318 {"chartreuse" , PALETTERGB (127,255, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1319 {"medium spring green" , PALETTERGB ( 0,250,154)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1320 {"MediumSpringGreen" , PALETTERGB ( 0,250,154)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1321 {"green yellow" , PALETTERGB (173,255, 47)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1322 {"GreenYellow" , PALETTERGB (173,255, 47)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1323 {"lime green" , PALETTERGB ( 50,205, 50)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1324 {"LimeGreen" , PALETTERGB ( 50,205, 50)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1325 {"yellow green" , PALETTERGB (154,205, 50)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1326 {"YellowGreen" , PALETTERGB (154,205, 50)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1327 {"forest green" , PALETTERGB ( 34,139, 34)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1328 {"ForestGreen" , PALETTERGB ( 34,139, 34)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1329 {"olive drab" , PALETTERGB (107,142, 35)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1330 {"OliveDrab" , PALETTERGB (107,142, 35)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1331 {"dark khaki" , PALETTERGB (189,183,107)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1332 {"DarkKhaki" , PALETTERGB (189,183,107)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1333 {"khaki" , PALETTERGB (240,230,140)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1334 {"pale goldenrod" , PALETTERGB (238,232,170)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1335 {"PaleGoldenrod" , PALETTERGB (238,232,170)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1336 {"light goldenrod yellow" , PALETTERGB (250,250,210)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1337 {"LightGoldenrodYellow" , PALETTERGB (250,250,210)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1338 {"light yellow" , PALETTERGB (255,255,224)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1339 {"LightYellow" , PALETTERGB (255,255,224)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1340 {"yellow" , PALETTERGB (255,255, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1341 {"gold" , PALETTERGB (255,215, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1342 {"light goldenrod" , PALETTERGB (238,221,130)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1343 {"LightGoldenrod" , PALETTERGB (238,221,130)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1344 {"goldenrod" , PALETTERGB (218,165, 32)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1345 {"dark goldenrod" , PALETTERGB (184,134, 11)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1346 {"DarkGoldenrod" , PALETTERGB (184,134, 11)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1347 {"rosy brown" , PALETTERGB (188,143,143)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1348 {"RosyBrown" , PALETTERGB (188,143,143)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1349 {"indian red" , PALETTERGB (205, 92, 92)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1350 {"IndianRed" , PALETTERGB (205, 92, 92)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1351 {"saddle brown" , PALETTERGB (139, 69, 19)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1352 {"SaddleBrown" , PALETTERGB (139, 69, 19)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1353 {"sienna" , PALETTERGB (160, 82, 45)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1354 {"peru" , PALETTERGB (205,133, 63)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1355 {"burlywood" , PALETTERGB (222,184,135)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1356 {"beige" , PALETTERGB (245,245,220)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1357 {"wheat" , PALETTERGB (245,222,179)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1358 {"sandy brown" , PALETTERGB (244,164, 96)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1359 {"SandyBrown" , PALETTERGB (244,164, 96)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1360 {"tan" , PALETTERGB (210,180,140)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1361 {"chocolate" , PALETTERGB (210,105, 30)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1362 {"firebrick" , PALETTERGB (178,34, 34)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1363 {"brown" , PALETTERGB (165,42, 42)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1364 {"dark salmon" , PALETTERGB (233,150,122)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1365 {"DarkSalmon" , PALETTERGB (233,150,122)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1366 {"salmon" , PALETTERGB (250,128,114)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1367 {"light salmon" , PALETTERGB (255,160,122)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1368 {"LightSalmon" , PALETTERGB (255,160,122)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1369 {"orange" , PALETTERGB (255,165, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1370 {"dark orange" , PALETTERGB (255,140, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1371 {"DarkOrange" , PALETTERGB (255,140, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1372 {"coral" , PALETTERGB (255,127, 80)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1373 {"light coral" , PALETTERGB (240,128,128)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1374 {"LightCoral" , PALETTERGB (240,128,128)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1375 {"tomato" , PALETTERGB (255, 99, 71)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1376 {"orange red" , PALETTERGB (255, 69, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1377 {"OrangeRed" , PALETTERGB (255, 69, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1378 {"red" , PALETTERGB (255, 0, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1379 {"hot pink" , PALETTERGB (255,105,180)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1380 {"HotPink" , PALETTERGB (255,105,180)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1381 {"deep pink" , PALETTERGB (255, 20,147)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1382 {"DeepPink" , PALETTERGB (255, 20,147)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1383 {"pink" , PALETTERGB (255,192,203)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1384 {"light pink" , PALETTERGB (255,182,193)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1385 {"LightPink" , PALETTERGB (255,182,193)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1386 {"pale violet red" , PALETTERGB (219,112,147)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1387 {"PaleVioletRed" , PALETTERGB (219,112,147)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1388 {"maroon" , PALETTERGB (176, 48, 96)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1389 {"medium violet red" , PALETTERGB (199, 21,133)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1390 {"MediumVioletRed" , PALETTERGB (199, 21,133)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1391 {"violet red" , PALETTERGB (208, 32,144)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1392 {"VioletRed" , PALETTERGB (208, 32,144)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1393 {"magenta" , PALETTERGB (255, 0,255)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1394 {"violet" , PALETTERGB (238,130,238)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1395 {"plum" , PALETTERGB (221,160,221)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1396 {"orchid" , PALETTERGB (218,112,214)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1397 {"medium orchid" , PALETTERGB (186, 85,211)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1398 {"MediumOrchid" , PALETTERGB (186, 85,211)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1399 {"dark orchid" , PALETTERGB (153, 50,204)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1400 {"DarkOrchid" , PALETTERGB (153, 50,204)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1401 {"dark violet" , PALETTERGB (148, 0,211)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1402 {"DarkViolet" , PALETTERGB (148, 0,211)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1403 {"blue violet" , PALETTERGB (138, 43,226)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1404 {"BlueViolet" , PALETTERGB (138, 43,226)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1405 {"purple" , PALETTERGB (160, 32,240)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1406 {"medium purple" , PALETTERGB (147,112,219)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1407 {"MediumPurple" , PALETTERGB (147,112,219)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1408 {"thistle" , PALETTERGB (216,191,216)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1409 {"gray0" , PALETTERGB ( 0, 0, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1410 {"grey0" , PALETTERGB ( 0, 0, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1411 {"dark grey" , PALETTERGB (169,169,169)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1412 {"DarkGrey" , PALETTERGB (169,169,169)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1413 {"dark gray" , PALETTERGB (169,169,169)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1414 {"DarkGray" , PALETTERGB (169,169,169)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1415 {"dark blue" , PALETTERGB ( 0, 0,139)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1416 {"DarkBlue" , PALETTERGB ( 0, 0,139)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1417 {"dark cyan" , PALETTERGB ( 0,139,139)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1418 {"DarkCyan" , PALETTERGB ( 0,139,139)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1419 {"dark magenta" , PALETTERGB (139, 0,139)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1420 {"DarkMagenta" , PALETTERGB (139, 0,139)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1421 {"dark red" , PALETTERGB (139, 0, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1422 {"DarkRed" , PALETTERGB (139, 0, 0)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1423 {"light green" , PALETTERGB (144,238,144)}, |
88b23d545848
(win32_color_map): Use PALETTERGB instead of RGB.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14810
diff
changeset
|
1424 {"LightGreen" , PALETTERGB (144,238,144)}, |
13434 | 1425 }; |
1426 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1427 DEFUN ("w32-default-color-map", Fw32_default_color_map, Sw32_default_color_map, |
13434 | 1428 0, 0, 0, "Return the default color map.") |
1429 () | |
1430 { | |
1431 int i; | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1432 colormap_t *pc = w32_color_map; |
13434 | 1433 Lisp_Object cmap; |
1434 | |
1435 BLOCK_INPUT; | |
1436 | |
1437 cmap = Qnil; | |
1438 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1439 for (i = 0; i < sizeof (w32_color_map) / sizeof (w32_color_map[0]); |
13434 | 1440 pc++, i++) |
1441 cmap = Fcons (Fcons (build_string (pc->name), | |
1442 make_number (pc->colorref)), | |
1443 cmap); | |
1444 | |
1445 UNBLOCK_INPUT; | |
1446 | |
1447 return (cmap); | |
1448 } | |
1449 | |
1450 Lisp_Object | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1451 w32_to_x_color (rgb) |
13434 | 1452 Lisp_Object rgb; |
1453 { | |
1454 Lisp_Object color; | |
1455 | |
1456 CHECK_NUMBER (rgb, 0); | |
1457 | |
1458 BLOCK_INPUT; | |
1459 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1460 color = Frassq (rgb, Vw32_color_map); |
13434 | 1461 |
1462 UNBLOCK_INPUT; | |
1463 | |
1464 if (!NILP (color)) | |
1465 return (Fcar (color)); | |
1466 else | |
1467 return Qnil; | |
1468 } | |
1469 | |
23314
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1470 COLORREF |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1471 w32_color_map_lookup (colorname) |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1472 char *colorname; |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1473 { |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1474 Lisp_Object tail, ret = Qnil; |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1475 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1476 BLOCK_INPUT; |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1477 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1478 for (tail = Vw32_color_map; !NILP (tail); tail = Fcdr (tail)) |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1479 { |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1480 register Lisp_Object elt, tem; |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1481 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1482 elt = Fcar (tail); |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1483 if (!CONSP (elt)) continue; |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1484 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1485 tem = Fcar (elt); |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1486 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1487 if (lstrcmpi (XSTRING (tem)->data, colorname) == 0) |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1488 { |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1489 ret = XUINT (Fcdr (elt)); |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1490 break; |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1491 } |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1492 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1493 QUIT; |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1494 } |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1495 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1496 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1497 UNBLOCK_INPUT; |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1498 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1499 return ret; |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1500 } |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1501 |
13434 | 1502 COLORREF |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1503 x_to_w32_color (colorname) |
13434 | 1504 char * colorname; |
1505 { | |
1506 register Lisp_Object tail, ret = Qnil; | |
1507 | |
1508 BLOCK_INPUT; | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1509 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1510 if (colorname[0] == '#') |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1511 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1512 /* Could be an old-style RGB Device specification. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1513 char *color; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1514 int size; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1515 color = colorname + 1; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1516 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1517 size = strlen(color); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1518 if (size == 3 || size == 6 || size == 9 || size == 12) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1519 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1520 UINT colorval; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1521 int i, pos; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1522 pos = 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1523 size /= 3; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1524 colorval = 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1525 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1526 for (i = 0; i < 3; i++) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1527 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1528 char *end; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1529 char t; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1530 unsigned long value; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1531 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1532 /* The check for 'x' in the following conditional takes into |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1533 account the fact that strtol allows a "0x" in front of |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1534 our numbers, and we don't. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1535 if (!isxdigit(color[0]) || color[1] == 'x') |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1536 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1537 t = color[size]; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1538 color[size] = '\0'; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1539 value = strtoul(color, &end, 16); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1540 color[size] = t; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1541 if (errno == ERANGE || end - color != size) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1542 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1543 switch (size) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1544 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1545 case 1: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1546 value = value * 0x10; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1547 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1548 case 2: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1549 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1550 case 3: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1551 value /= 0x10; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1552 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1553 case 4: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1554 value /= 0x100; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1555 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1556 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1557 colorval |= (value << pos); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1558 pos += 0x8; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1559 if (i == 2) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1560 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1561 UNBLOCK_INPUT; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1562 return (colorval); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1563 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1564 color = end; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1565 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1566 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1567 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1568 else if (strnicmp(colorname, "rgb:", 4) == 0) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1569 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1570 char *color; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1571 UINT colorval; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1572 int i, pos; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1573 pos = 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1574 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1575 colorval = 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1576 color = colorname + 4; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1577 for (i = 0; i < 3; i++) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1578 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1579 char *end; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1580 unsigned long value; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1581 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1582 /* The check for 'x' in the following conditional takes into |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1583 account the fact that strtol allows a "0x" in front of |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1584 our numbers, and we don't. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1585 if (!isxdigit(color[0]) || color[1] == 'x') |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1586 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1587 value = strtoul(color, &end, 16); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1588 if (errno == ERANGE) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1589 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1590 switch (end - color) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1591 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1592 case 1: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1593 value = value * 0x10 + value; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1594 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1595 case 2: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1596 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1597 case 3: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1598 value /= 0x10; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1599 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1600 case 4: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1601 value /= 0x100; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1602 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1603 default: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1604 value = ULONG_MAX; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1605 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1606 if (value == ULONG_MAX) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1607 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1608 colorval |= (value << pos); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1609 pos += 0x8; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1610 if (i == 2) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1611 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1612 if (*end != '\0') |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1613 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1614 UNBLOCK_INPUT; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1615 return (colorval); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1616 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1617 if (*end != '/') |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1618 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1619 color = end + 1; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1620 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1621 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1622 else if (strnicmp(colorname, "rgbi:", 5) == 0) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1623 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1624 /* This is an RGB Intensity specification. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1625 char *color; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1626 UINT colorval; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1627 int i, pos; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1628 pos = 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1629 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1630 colorval = 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1631 color = colorname + 5; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1632 for (i = 0; i < 3; i++) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1633 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1634 char *end; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1635 double value; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1636 UINT val; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1637 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1638 value = strtod(color, &end); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1639 if (errno == ERANGE) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1640 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1641 if (value < 0.0 || value > 1.0) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1642 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1643 val = (UINT)(0x100 * value); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1644 /* We used 0x100 instead of 0xFF to give an continuous |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1645 range between 0.0 and 1.0 inclusive. The next statement |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1646 fixes the 1.0 case. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1647 if (val == 0x100) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1648 val = 0xFF; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1649 colorval |= (val << pos); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1650 pos += 0x8; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1651 if (i == 2) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1652 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1653 if (*end != '\0') |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1654 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1655 UNBLOCK_INPUT; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1656 return (colorval); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1657 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1658 if (*end != '/') |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1659 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1660 color = end + 1; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1661 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1662 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1663 /* I am not going to attempt to handle any of the CIE color schemes |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1664 or TekHVC, since I don't know the algorithms for conversion to |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
1665 RGB. */ |
23314
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1666 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1667 /* If we fail to lookup the color name in w32_color_map, then check the |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1668 colorname to see if it can be crudely approximated: If the X color |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1669 ends in a number (e.g., "darkseagreen2"), strip the number and |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1670 return the result of looking up the base color name. */ |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1671 ret = w32_color_map_lookup (colorname); |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1672 if (NILP (ret)) |
13434 | 1673 { |
23314
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1674 int len = strlen (colorname); |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1675 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1676 if (isdigit (colorname[len - 1])) |
13434 | 1677 { |
23314
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1678 char *ptr, *approx = alloca (len); |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1679 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1680 strcpy (approx, colorname); |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1681 ptr = &approx[len - 1]; |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1682 while (ptr > approx && isdigit (*ptr)) |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1683 *ptr-- = '\0'; |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1684 |
87acd2b6ce97
(w32_color_map_lookup): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23160
diff
changeset
|
1685 ret = w32_color_map_lookup (approx); |
13434 | 1686 } |
1687 } | |
1688 | |
1689 UNBLOCK_INPUT; | |
1690 return ret; | |
1691 } | |
1692 | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1693 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1694 void |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1695 w32_regenerate_palette (FRAME_PTR f) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1696 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1697 struct w32_palette_entry * list; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1698 LOGPALETTE * log_palette; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1699 HPALETTE new_palette; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1700 int i; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1701 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1702 /* don't bother trying to create palette if not supported */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1703 if (! FRAME_W32_DISPLAY_INFO (f)->has_palette) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1704 return; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1705 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1706 log_palette = (LOGPALETTE *) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1707 alloca (sizeof (LOGPALETTE) + |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1708 FRAME_W32_DISPLAY_INFO (f)->num_colors * sizeof (PALETTEENTRY)); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1709 log_palette->palVersion = 0x300; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1710 log_palette->palNumEntries = FRAME_W32_DISPLAY_INFO (f)->num_colors; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1711 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1712 list = FRAME_W32_DISPLAY_INFO (f)->color_list; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1713 for (i = 0; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1714 i < FRAME_W32_DISPLAY_INFO (f)->num_colors; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1715 i++, list = list->next) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1716 log_palette->palPalEntry[i] = list->entry; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1717 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1718 new_palette = CreatePalette (log_palette); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1719 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1720 enter_crit (); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1721 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1722 if (FRAME_W32_DISPLAY_INFO (f)->palette) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1723 DeleteObject (FRAME_W32_DISPLAY_INFO (f)->palette); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1724 FRAME_W32_DISPLAY_INFO (f)->palette = new_palette; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1725 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1726 /* Realize display palette and garbage all frames. */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1727 release_frame_dc (f, get_frame_dc (f)); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1728 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1729 leave_crit (); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1730 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1731 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1732 #define W32_COLOR(pe) RGB (pe.peRed, pe.peGreen, pe.peBlue) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1733 #define SET_W32_COLOR(pe, color) \ |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1734 do \ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1735 { \ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1736 pe.peRed = GetRValue (color); \ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1737 pe.peGreen = GetGValue (color); \ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1738 pe.peBlue = GetBValue (color); \ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1739 pe.peFlags = 0; \ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1740 } while (0) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1741 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1742 #if 0 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1743 /* Keep these around in case we ever want to track color usage. */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1744 void |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1745 w32_map_color (FRAME_PTR f, COLORREF color) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1746 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1747 struct w32_palette_entry * list = FRAME_W32_DISPLAY_INFO (f)->color_list; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1748 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1749 if (NILP (Vw32_enable_palette)) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1750 return; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1751 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1752 /* check if color is already mapped */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1753 while (list) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1754 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1755 if (W32_COLOR (list->entry) == color) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1756 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1757 ++list->refcount; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1758 return; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1759 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1760 list = list->next; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1761 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1762 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1763 /* not already mapped, so add to list and recreate Windows palette */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1764 list = (struct w32_palette_entry *) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1765 xmalloc (sizeof (struct w32_palette_entry)); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1766 SET_W32_COLOR (list->entry, color); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1767 list->refcount = 1; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1768 list->next = FRAME_W32_DISPLAY_INFO (f)->color_list; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1769 FRAME_W32_DISPLAY_INFO (f)->color_list = list; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1770 FRAME_W32_DISPLAY_INFO (f)->num_colors++; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1771 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1772 /* set flag that palette must be regenerated */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1773 FRAME_W32_DISPLAY_INFO (f)->regen_palette = TRUE; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1774 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1775 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1776 void |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1777 w32_unmap_color (FRAME_PTR f, COLORREF color) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1778 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1779 struct w32_palette_entry * list = FRAME_W32_DISPLAY_INFO (f)->color_list; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1780 struct w32_palette_entry **prev = &FRAME_W32_DISPLAY_INFO (f)->color_list; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1781 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1782 if (NILP (Vw32_enable_palette)) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1783 return; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1784 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1785 /* check if color is already mapped */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1786 while (list) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1787 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1788 if (W32_COLOR (list->entry) == color) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1789 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1790 if (--list->refcount == 0) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1791 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1792 *prev = list->next; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1793 xfree (list); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1794 FRAME_W32_DISPLAY_INFO (f)->num_colors--; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1795 break; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1796 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1797 else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1798 return; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1799 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1800 prev = &list->next; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1801 list = list->next; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1802 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1803 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1804 /* set flag that palette must be regenerated */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1805 FRAME_W32_DISPLAY_INFO (f)->regen_palette = TRUE; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1806 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1807 #endif |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1808 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1809 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1810 /* Gamma-correct COLOR on frame F. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1811 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1812 void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1813 gamma_correct (f, color) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1814 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1815 COLORREF *color; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1816 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1817 if (f->gamma) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1818 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1819 *color = PALETTERGB ( |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1820 pow (GetRValue (*color) / 255.0, f->gamma) * 255.0 + 0.5, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1821 pow (GetGValue (*color) / 255.0, f->gamma) * 255.0 + 0.5, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1822 pow (GetBValue (*color) / 255.0, f->gamma) * 255.0 + 0.5); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1823 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1824 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1825 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1826 |
13434 | 1827 /* Decide if color named COLOR is valid for the display associated with |
1828 the selected frame; if so, return the rgb values in COLOR_DEF. | |
1829 If ALLOC is nonzero, allocate a new colormap cell. */ | |
1830 | |
1831 int | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1832 w32_defined_color (f, color, color_def, alloc) |
13434 | 1833 FRAME_PTR f; |
1834 char *color; | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1835 XColor *color_def; |
13434 | 1836 int alloc; |
1837 { | |
1838 register Lisp_Object tem; | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1839 COLORREF w32_color_ref; |
14353 | 1840 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1841 tem = x_to_w32_color (color); |
14353 | 1842 |
13434 | 1843 if (!NILP (tem)) |
1844 { | |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
1845 if (f) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
1846 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
1847 /* Apply gamma correction. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
1848 w32_color_ref = XUINT (tem); |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
1849 gamma_correct (f, &w32_color_ref); |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
1850 XSETINT (tem, w32_color_ref); |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
1851 } |
27407
7df920562cbe
(w32_defined_color): Apply gamma correction before trying to map to
Jason Rumney <jasonr@gnu.org>
parents:
27397
diff
changeset
|
1852 |
7df920562cbe
(w32_defined_color): Apply gamma correction before trying to map to
Jason Rumney <jasonr@gnu.org>
parents:
27397
diff
changeset
|
1853 /* Map this color to the palette if it is enabled. */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1854 if (!NILP (Vw32_enable_palette)) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1855 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1856 struct w32_palette_entry * entry = |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
1857 one_w32_display_info.color_list; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1858 struct w32_palette_entry ** prev = |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
1859 &one_w32_display_info.color_list; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1860 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1861 /* check if color is already mapped */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1862 while (entry) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1863 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1864 if (W32_COLOR (entry->entry) == XUINT (tem)) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1865 break; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1866 prev = &entry->next; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1867 entry = entry->next; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1868 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1869 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1870 if (entry == NULL && alloc) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1871 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1872 /* not already mapped, so add to list */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1873 entry = (struct w32_palette_entry *) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1874 xmalloc (sizeof (struct w32_palette_entry)); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1875 SET_W32_COLOR (entry->entry, XUINT (tem)); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1876 entry->next = NULL; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1877 *prev = entry; |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
1878 one_w32_display_info.num_colors++; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1879 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1880 /* set flag that palette must be regenerated */ |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
1881 one_w32_display_info.regen_palette = TRUE; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1882 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1883 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1884 /* Ensure COLORREF value is snapped to nearest color in (default) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1885 palette by simulating the PALETTERGB macro. This works whether |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1886 or not the display device has a palette. */ |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1887 w32_color_ref = XUINT (tem) | 0x2000000; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1888 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1889 color_def->pixel = w32_color_ref; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1890 color_def->red = GetRValue (w32_color_ref); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1891 color_def->green = GetGValue (w32_color_ref); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1892 color_def->blue = GetBValue (w32_color_ref); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1893 |
13434 | 1894 return 1; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1895 } |
13434 | 1896 else |
14353 | 1897 { |
1898 return 0; | |
1899 } | |
13434 | 1900 } |
1901 | |
1902 /* Given a string ARG naming a color, compute a pixel value from it | |
1903 suitable for screen F. | |
1904 If F is not a color screen, return DEF (default) regardless of what | |
1905 ARG says. */ | |
1906 | |
1907 int | |
1908 x_decode_color (f, arg, def) | |
1909 FRAME_PTR f; | |
1910 Lisp_Object arg; | |
1911 int def; | |
1912 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1913 XColor cdef; |
13434 | 1914 |
1915 CHECK_STRING (arg, 0); | |
1916 | |
1917 if (strcmp (XSTRING (arg)->data, "black") == 0) | |
1918 return BLACK_PIX_DEFAULT (f); | |
1919 else if (strcmp (XSTRING (arg)->data, "white") == 0) | |
1920 return WHITE_PIX_DEFAULT (f); | |
1921 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1922 if ((FRAME_W32_DISPLAY_INFO (f)->n_planes * FRAME_W32_DISPLAY_INFO (f)->n_cbits) == 1) |
13434 | 1923 return def; |
1924 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1925 /* w32_defined_color is responsible for coping with failures |
13434 | 1926 by looking for a near-miss. */ |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1927 if (w32_defined_color (f, XSTRING (arg)->data, &cdef, 1)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1928 return cdef.pixel; |
13434 | 1929 |
1930 /* defined_color failed; return an ultimate default. */ | |
1931 return def; | |
1932 } | |
1933 | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1934 /* Change the `line-spacing' frame parameter of frame F. OLD_VALUE is |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1935 the previous value of that parameter, NEW_VALUE is the new value. */ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1936 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1937 static void |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1938 x_set_line_spacing (f, new_value, old_value) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1939 struct frame *f; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1940 Lisp_Object new_value, old_value; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1941 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1942 if (NILP (new_value)) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1943 f->extra_line_spacing = 0; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1944 else if (NATNUMP (new_value)) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1945 f->extra_line_spacing = XFASTINT (new_value); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1946 else |
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30239
diff
changeset
|
1947 Fsignal (Qerror, Fcons (build_string ("Invalid line-spacing"), |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1948 Fcons (new_value, Qnil))); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1949 if (FRAME_VISIBLE_P (f)) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1950 redraw_frame (f); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1951 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1952 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
1953 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1954 /* Change the `screen-gamma' frame parameter of frame F. OLD_VALUE is |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1955 the previous value of that parameter, NEW_VALUE is the new value. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1956 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1957 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1958 x_set_screen_gamma (f, new_value, old_value) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1959 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1960 Lisp_Object new_value, old_value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1961 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1962 if (NILP (new_value)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1963 f->gamma = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1964 else if (NUMBERP (new_value) && XFLOATINT (new_value) > 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1965 /* The value 0.4545 is the normal viewing gamma. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1966 f->gamma = 1.0 / (0.4545 * XFLOATINT (new_value)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1967 else |
30601
7c995a54a0e8
Replace `illegal' with `invalid'.
Gerd Moellmann <gerd@gnu.org>
parents:
30239
diff
changeset
|
1968 Fsignal (Qerror, Fcons (build_string ("Invalid screen-gamma"), |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1969 Fcons (new_value, Qnil))); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1970 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1971 clear_face_cache (0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1972 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1973 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1974 |
13434 | 1975 /* Functions called only from `x_set_frame_param' |
1976 to set individual parameters. | |
1977 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1978 If FRAME_W32_WINDOW (f) is 0, |
13434 | 1979 the frame is being created and its window does not exist yet. |
1980 In that case, just record the parameter's new value | |
1981 in the standard place; do not attempt to change the window. */ | |
1982 | |
1983 void | |
1984 x_set_foreground_color (f, arg, oldval) | |
1985 struct frame *f; | |
1986 Lisp_Object arg, oldval; | |
1987 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1988 FRAME_FOREGROUND_PIXEL (f) |
13434 | 1989 = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f)); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
1990 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
1991 if (FRAME_W32_WINDOW (f) != 0) |
13434 | 1992 { |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1993 update_face_from_frame_parameter (f, Qforeground_color, arg); |
13434 | 1994 if (FRAME_VISIBLE_P (f)) |
1995 redraw_frame (f); | |
1996 } | |
1997 } | |
1998 | |
1999 void | |
2000 x_set_background_color (f, arg, oldval) | |
2001 struct frame *f; | |
2002 Lisp_Object arg, oldval; | |
2003 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2004 FRAME_BACKGROUND_PIXEL (f) |
13434 | 2005 = x_decode_color (f, arg, WHITE_PIX_DEFAULT (f)); |
2006 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2007 if (FRAME_W32_WINDOW (f) != 0) |
13434 | 2008 { |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2009 SetWindowLong (FRAME_W32_WINDOW (f), WND_BACKGROUND_INDEX, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2010 FRAME_BACKGROUND_PIXEL (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2011 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2012 update_face_from_frame_parameter (f, Qbackground_color, arg); |
13434 | 2013 |
2014 if (FRAME_VISIBLE_P (f)) | |
2015 redraw_frame (f); | |
2016 } | |
2017 } | |
2018 | |
2019 void | |
2020 x_set_mouse_color (f, arg, oldval) | |
2021 struct frame *f; | |
2022 Lisp_Object arg, oldval; | |
2023 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2024 |
13434 | 2025 Cursor cursor, nontext_cursor, mode_cursor, cross_cursor; |
17632
d2915156a803
(x_set_mouse_color): Update calls to x_catch_errors
Richard M. Stallman <rms@gnu.org>
parents:
16884
diff
changeset
|
2026 int count; |
13434 | 2027 int mask_color; |
2028 | |
2029 if (!EQ (Qnil, arg)) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2030 f->output_data.w32->mouse_pixel |
13434 | 2031 = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f)); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2032 mask_color = FRAME_BACKGROUND_PIXEL (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2033 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2034 /* Don't let pointers be invisible. */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2035 if (mask_color == f->output_data.w32->mouse_pixel |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2036 && mask_color == FRAME_BACKGROUND_PIXEL (f)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2037 f->output_data.w32->mouse_pixel = FRAME_FOREGROUND_PIXEL (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2038 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2039 #if 0 /* NTEMACS_TODO : cursor changes */ |
13434 | 2040 BLOCK_INPUT; |
2041 | |
2042 /* It's not okay to crash if the user selects a screwy cursor. */ | |
17632
d2915156a803
(x_set_mouse_color): Update calls to x_catch_errors
Richard M. Stallman <rms@gnu.org>
parents:
16884
diff
changeset
|
2043 count = x_catch_errors (FRAME_W32_DISPLAY (f)); |
13434 | 2044 |
2045 if (!EQ (Qnil, Vx_pointer_shape)) | |
2046 { | |
2047 CHECK_NUMBER (Vx_pointer_shape, 0); | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2048 cursor = XCreateFontCursor (FRAME_W32_DISPLAY (f), XINT (Vx_pointer_shape)); |
13434 | 2049 } |
2050 else | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2051 cursor = XCreateFontCursor (FRAME_W32_DISPLAY (f), XC_xterm); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2052 x_check_errors (FRAME_W32_DISPLAY (f), "bad text pointer cursor: %s"); |
13434 | 2053 |
2054 if (!EQ (Qnil, Vx_nontext_pointer_shape)) | |
2055 { | |
2056 CHECK_NUMBER (Vx_nontext_pointer_shape, 0); | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2057 nontext_cursor = XCreateFontCursor (FRAME_W32_DISPLAY (f), |
13434 | 2058 XINT (Vx_nontext_pointer_shape)); |
2059 } | |
2060 else | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2061 nontext_cursor = XCreateFontCursor (FRAME_W32_DISPLAY (f), XC_left_ptr); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2062 x_check_errors (FRAME_W32_DISPLAY (f), "bad nontext pointer cursor: %s"); |
13434 | 2063 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2064 if (!EQ (Qnil, Vx_busy_pointer_shape)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2065 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2066 CHECK_NUMBER (Vx_busy_pointer_shape, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2067 busy_cursor = XCreateFontCursor (FRAME_W32_DISPLAY (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2068 XINT (Vx_busy_pointer_shape)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2069 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2070 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2071 busy_cursor = XCreateFontCursor (FRAME_W32_DISPLAY (f), XC_watch); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2072 x_check_errors (FRAME_W32_DISPLAY (f), "bad busy pointer cursor: %s"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2073 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2074 x_check_errors (FRAME_W32_DISPLAY (f), "bad nontext pointer cursor: %s"); |
13434 | 2075 if (!EQ (Qnil, Vx_mode_pointer_shape)) |
2076 { | |
2077 CHECK_NUMBER (Vx_mode_pointer_shape, 0); | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2078 mode_cursor = XCreateFontCursor (FRAME_W32_DISPLAY (f), |
13434 | 2079 XINT (Vx_mode_pointer_shape)); |
2080 } | |
2081 else | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2082 mode_cursor = XCreateFontCursor (FRAME_W32_DISPLAY (f), XC_xterm); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2083 x_check_errors (FRAME_W32_DISPLAY (f), "bad modeline pointer cursor: %s"); |
13434 | 2084 |
2085 if (!EQ (Qnil, Vx_sensitive_text_pointer_shape)) | |
2086 { | |
2087 CHECK_NUMBER (Vx_sensitive_text_pointer_shape, 0); | |
2088 cross_cursor | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2089 = XCreateFontCursor (FRAME_W32_DISPLAY (f), |
13434 | 2090 XINT (Vx_sensitive_text_pointer_shape)); |
2091 } | |
2092 else | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2093 cross_cursor = XCreateFontCursor (FRAME_W32_DISPLAY (f), XC_crosshair); |
13434 | 2094 |
2095 /* Check and report errors with the above calls. */ | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2096 x_check_errors (FRAME_W32_DISPLAY (f), "can't set cursor shape: %s"); |
17632
d2915156a803
(x_set_mouse_color): Update calls to x_catch_errors
Richard M. Stallman <rms@gnu.org>
parents:
16884
diff
changeset
|
2097 x_uncatch_errors (FRAME_W32_DISPLAY (f), count); |
13434 | 2098 |
2099 { | |
2100 XColor fore_color, back_color; | |
2101 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2102 fore_color.pixel = f->output_data.w32->mouse_pixel; |
13434 | 2103 back_color.pixel = mask_color; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2104 XQueryColor (FRAME_W32_DISPLAY (f), |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2105 DefaultColormap (FRAME_W32_DISPLAY (f), |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2106 DefaultScreen (FRAME_W32_DISPLAY (f))), |
13434 | 2107 &fore_color); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2108 XQueryColor (FRAME_W32_DISPLAY (f), |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2109 DefaultColormap (FRAME_W32_DISPLAY (f), |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2110 DefaultScreen (FRAME_W32_DISPLAY (f))), |
13434 | 2111 &back_color); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2112 XRecolorCursor (FRAME_W32_DISPLAY (f), cursor, |
13434 | 2113 &fore_color, &back_color); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2114 XRecolorCursor (FRAME_W32_DISPLAY (f), nontext_cursor, |
13434 | 2115 &fore_color, &back_color); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2116 XRecolorCursor (FRAME_W32_DISPLAY (f), mode_cursor, |
13434 | 2117 &fore_color, &back_color); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2118 XRecolorCursor (FRAME_W32_DISPLAY (f), cross_cursor, |
13434 | 2119 &fore_color, &back_color); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2120 XRecolorCursor (FRAME_W32_DISPLAY (f), busy_cursor, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2121 &fore_color, &back_color); |
13434 | 2122 } |
2123 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2124 if (FRAME_W32_WINDOW (f) != 0) |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2125 XDefineCursor (FRAME_W32_DISPLAY (f), FRAME_W32_WINDOW (f), cursor); |
13434 | 2126 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2127 if (cursor != f->output_data.w32->text_cursor && f->output_data.w32->text_cursor != 0) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2128 XFreeCursor (FRAME_W32_DISPLAY (f), f->output_data.w32->text_cursor); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2129 f->output_data.w32->text_cursor = cursor; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2130 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2131 if (nontext_cursor != f->output_data.w32->nontext_cursor |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2132 && f->output_data.w32->nontext_cursor != 0) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2133 XFreeCursor (FRAME_W32_DISPLAY (f), f->output_data.w32->nontext_cursor); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2134 f->output_data.w32->nontext_cursor = nontext_cursor; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2135 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2136 if (busy_cursor != f->output_data.w32->busy_cursor |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2137 && f->output_data.w32->busy_cursor != 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2138 XFreeCursor (FRAME_W32_DISPLAY (f), f->output_data.w32->busy_cursor); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2139 f->output_data.w32->busy_cursor = busy_cursor; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2140 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2141 if (mode_cursor != f->output_data.w32->modeline_cursor |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2142 && f->output_data.w32->modeline_cursor != 0) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2143 XFreeCursor (FRAME_W32_DISPLAY (f), f->output_data.w32->modeline_cursor); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2144 f->output_data.w32->modeline_cursor = mode_cursor; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2145 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2146 if (cross_cursor != f->output_data.w32->cross_cursor |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2147 && f->output_data.w32->cross_cursor != 0) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2148 XFreeCursor (FRAME_W32_DISPLAY (f), f->output_data.w32->cross_cursor); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2149 f->output_data.w32->cross_cursor = cross_cursor; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2150 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2151 XFlush (FRAME_W32_DISPLAY (f)); |
13434 | 2152 UNBLOCK_INPUT; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2153 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2154 update_face_from_frame_parameter (f, Qmouse_color, arg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2155 #endif /* NTEMACS_TODO */ |
13434 | 2156 } |
2157 | |
2158 void | |
2159 x_set_cursor_color (f, arg, oldval) | |
2160 struct frame *f; | |
2161 Lisp_Object arg, oldval; | |
2162 { | |
2163 unsigned long fore_pixel; | |
2164 | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2165 if (!NILP (Vx_cursor_fore_pixel)) |
13434 | 2166 fore_pixel = x_decode_color (f, Vx_cursor_fore_pixel, |
2167 WHITE_PIX_DEFAULT (f)); | |
2168 else | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2169 fore_pixel = FRAME_BACKGROUND_PIXEL (f); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2170 f->output_data.w32->cursor_pixel = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f)); |
13434 | 2171 |
2172 /* Make sure that the cursor color differs from the background color. */ | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2173 if (f->output_data.w32->cursor_pixel == FRAME_BACKGROUND_PIXEL (f)) |
13434 | 2174 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2175 f->output_data.w32->cursor_pixel = f->output_data.w32->mouse_pixel; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2176 if (f->output_data.w32->cursor_pixel == fore_pixel) |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2177 fore_pixel = FRAME_BACKGROUND_PIXEL (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2178 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2179 FRAME_FOREGROUND_PIXEL (f) = fore_pixel; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2180 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2181 if (FRAME_W32_WINDOW (f) != 0) |
13434 | 2182 { |
2183 if (FRAME_VISIBLE_P (f)) | |
2184 { | |
2185 x_display_cursor (f, 0); | |
2186 x_display_cursor (f, 1); | |
2187 } | |
2188 } | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2189 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2190 update_face_from_frame_parameter (f, Qcursor_color, arg); |
13434 | 2191 } |
2192 | |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2193 /* Set the border-color of frame F to pixel value PIX. |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2194 Note that this does not fully take effect if done before |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2195 F has an window. */ |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2196 void |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2197 x_set_border_pixel (f, pix) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2198 struct frame *f; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2199 int pix; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2200 { |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2201 f->output_data.w32->border_pixel = pix; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2202 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2203 if (FRAME_W32_WINDOW (f) != 0 && f->output_data.w32->border_width > 0) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2204 { |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2205 if (FRAME_VISIBLE_P (f)) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2206 redraw_frame (f); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2207 } |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2208 } |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
2209 |
13434 | 2210 /* Set the border-color of frame F to value described by ARG. |
2211 ARG can be a string naming a color. | |
2212 The border-color is used for the border that is drawn by the server. | |
2213 Note that this does not fully take effect if done before | |
2214 F has a window; it must be redone when the window is created. */ | |
2215 | |
2216 void | |
2217 x_set_border_color (f, arg, oldval) | |
2218 struct frame *f; | |
2219 Lisp_Object arg, oldval; | |
2220 { | |
2221 int pix; | |
2222 | |
2223 CHECK_STRING (arg, 0); | |
2224 pix = x_decode_color (f, arg, BLACK_PIX_DEFAULT (f)); | |
2225 x_set_border_pixel (f, pix); | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2226 update_face_from_frame_parameter (f, Qborder_color, arg); |
13434 | 2227 } |
2228 | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2229 /* Value is the internal representation of the specified cursor type |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2230 ARG. If type is BAR_CURSOR, return in *WIDTH the specified width |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2231 of the bar cursor. */ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2232 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2233 enum text_cursor_kinds |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2234 x_specified_cursor_type (arg, width) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2235 Lisp_Object arg; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2236 int *width; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2237 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2238 enum text_cursor_kinds type; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2239 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2240 if (EQ (arg, Qbar)) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2241 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2242 type = BAR_CURSOR; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2243 *width = 2; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2244 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2245 else if (CONSP (arg) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2246 && EQ (XCAR (arg), Qbar) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2247 && INTEGERP (XCDR (arg)) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2248 && XINT (XCDR (arg)) >= 0) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2249 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2250 type = BAR_CURSOR; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2251 *width = XINT (XCDR (arg)); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2252 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2253 else if (NILP (arg)) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2254 type = NO_CURSOR; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2255 else |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2256 /* Treat anything unknown as "box cursor". |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2257 It was bad to signal an error; people have trouble fixing |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2258 .Xdefaults with Emacs, when it has something bad in it. */ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2259 type = FILLED_BOX_CURSOR; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2260 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2261 return type; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2262 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2263 |
13434 | 2264 void |
2265 x_set_cursor_type (f, arg, oldval) | |
2266 FRAME_PTR f; | |
2267 Lisp_Object arg, oldval; | |
2268 { | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2269 int width; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2270 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2271 FRAME_DESIRED_CURSOR (f) = x_specified_cursor_type (arg, &width); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2272 f->output_data.w32->cursor_width = width; |
13434 | 2273 |
2274 /* Make sure the cursor gets redrawn. This is overkill, but how | |
2275 often do people change cursor types? */ | |
2276 update_mode_lines++; | |
2277 } | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2278 |
13434 | 2279 void |
2280 x_set_icon_type (f, arg, oldval) | |
2281 struct frame *f; | |
2282 Lisp_Object arg, oldval; | |
2283 { | |
2284 int result; | |
2285 | |
25235
98c67187cd6b
(x_set_icon_type): Support setting frame icons.
Geoff Voelker <voelker@cs.washington.edu>
parents:
25084
diff
changeset
|
2286 if (NILP (arg) && NILP (oldval)) |
98c67187cd6b
(x_set_icon_type): Support setting frame icons.
Geoff Voelker <voelker@cs.washington.edu>
parents:
25084
diff
changeset
|
2287 return; |
98c67187cd6b
(x_set_icon_type): Support setting frame icons.
Geoff Voelker <voelker@cs.washington.edu>
parents:
25084
diff
changeset
|
2288 |
98c67187cd6b
(x_set_icon_type): Support setting frame icons.
Geoff Voelker <voelker@cs.washington.edu>
parents:
25084
diff
changeset
|
2289 if (STRINGP (arg) && STRINGP (oldval) |
98c67187cd6b
(x_set_icon_type): Support setting frame icons.
Geoff Voelker <voelker@cs.washington.edu>
parents:
25084
diff
changeset
|
2290 && EQ (Fstring_equal (oldval, arg), Qt)) |
98c67187cd6b
(x_set_icon_type): Support setting frame icons.
Geoff Voelker <voelker@cs.washington.edu>
parents:
25084
diff
changeset
|
2291 return; |
98c67187cd6b
(x_set_icon_type): Support setting frame icons.
Geoff Voelker <voelker@cs.washington.edu>
parents:
25084
diff
changeset
|
2292 |
98c67187cd6b
(x_set_icon_type): Support setting frame icons.
Geoff Voelker <voelker@cs.washington.edu>
parents:
25084
diff
changeset
|
2293 if (SYMBOLP (arg) && SYMBOLP (oldval) && EQ (arg, oldval)) |
13434 | 2294 return; |
2295 | |
2296 BLOCK_INPUT; | |
25235
98c67187cd6b
(x_set_icon_type): Support setting frame icons.
Geoff Voelker <voelker@cs.washington.edu>
parents:
25084
diff
changeset
|
2297 |
98c67187cd6b
(x_set_icon_type): Support setting frame icons.
Geoff Voelker <voelker@cs.washington.edu>
parents:
25084
diff
changeset
|
2298 result = x_bitmap_icon (f, arg); |
13434 | 2299 if (result) |
2300 { | |
2301 UNBLOCK_INPUT; | |
2302 error ("No icon window available"); | |
2303 } | |
2304 | |
2305 UNBLOCK_INPUT; | |
2306 } | |
2307 | |
2308 /* Return non-nil if frame F wants a bitmap icon. */ | |
2309 | |
2310 Lisp_Object | |
2311 x_icon_type (f) | |
2312 FRAME_PTR f; | |
2313 { | |
2314 Lisp_Object tem; | |
2315 | |
2316 tem = assq_no_quit (Qicon_type, f->param_alist); | |
2317 if (CONSP (tem)) | |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
2318 return XCDR (tem); |
13434 | 2319 else |
2320 return Qnil; | |
2321 } | |
2322 | |
2323 void | |
2324 x_set_icon_name (f, arg, oldval) | |
2325 struct frame *f; | |
2326 Lisp_Object arg, oldval; | |
2327 { | |
2328 int result; | |
2329 | |
2330 if (STRINGP (arg)) | |
2331 { | |
2332 if (STRINGP (oldval) && EQ (Fstring_equal (oldval, arg), Qt)) | |
2333 return; | |
2334 } | |
2335 else if (!STRINGP (oldval) && EQ (oldval, Qnil) == EQ (arg, Qnil)) | |
2336 return; | |
2337 | |
2338 f->icon_name = arg; | |
2339 | |
2340 #if 0 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2341 if (f->output_data.w32->icon_bitmap != 0) |
13434 | 2342 return; |
2343 | |
2344 BLOCK_INPUT; | |
2345 | |
2346 result = x_text_icon (f, | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2347 (char *) XSTRING ((!NILP (f->icon_name) |
13434 | 2348 ? f->icon_name |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2349 : !NILP (f->title) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2350 ? f->title |
13434 | 2351 : f->name))->data); |
2352 | |
2353 if (result) | |
2354 { | |
2355 UNBLOCK_INPUT; | |
2356 error ("No icon window available"); | |
2357 } | |
2358 | |
2359 /* If the window was unmapped (and its icon was mapped), | |
2360 the new icon is not mapped, so map the window in its stead. */ | |
2361 if (FRAME_VISIBLE_P (f)) | |
2362 { | |
2363 #ifdef USE_X_TOOLKIT | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2364 XtPopup (f->output_data.w32->widget, XtGrabNone); |
13434 | 2365 #endif |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2366 XMapWindow (FRAME_W32_DISPLAY (f), FRAME_W32_WINDOW (f)); |
13434 | 2367 } |
2368 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2369 XFlush (FRAME_W32_DISPLAY (f)); |
13434 | 2370 UNBLOCK_INPUT; |
2371 #endif | |
2372 } | |
2373 | |
2374 extern Lisp_Object x_new_font (); | |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
2375 extern Lisp_Object x_new_fontset(); |
13434 | 2376 |
2377 void | |
2378 x_set_font (f, arg, oldval) | |
2379 struct frame *f; | |
2380 Lisp_Object arg, oldval; | |
2381 { | |
2382 Lisp_Object result; | |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
2383 Lisp_Object fontset_name; |
22625
e7bd87148368
(Fx_list_fonts): Bring arglist into sync with xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
22078
diff
changeset
|
2384 Lisp_Object frame; |
13434 | 2385 |
2386 CHECK_STRING (arg, 1); | |
2387 | |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
2388 fontset_name = Fquery_fontset (arg, Qnil); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
2389 |
13434 | 2390 BLOCK_INPUT; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
2391 result = (STRINGP (fontset_name) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
2392 ? x_new_fontset (f, XSTRING (fontset_name)->data) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
2393 : x_new_font (f, XSTRING (arg)->data)); |
13434 | 2394 UNBLOCK_INPUT; |
2395 | |
2396 if (EQ (result, Qnil)) | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2397 error ("Font `%s' is not defined", XSTRING (arg)->data); |
13434 | 2398 else if (EQ (result, Qt)) |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2399 error ("The characters of the given font have varying widths"); |
13434 | 2400 else if (STRINGP (result)) |
2401 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2402 store_frame_param (f, Qfont, result); |
13434 | 2403 recompute_basic_faces (f); |
2404 } | |
2405 else | |
2406 abort (); | |
22625
e7bd87148368
(Fx_list_fonts): Bring arglist into sync with xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
22078
diff
changeset
|
2407 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2408 do_pending_window_change (0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2409 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2410 /* Don't call `face-set-after-frame-default' when faces haven't been |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2411 initialized yet. This is the case when called from |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2412 Fx_create_frame. In that case, the X widget or window doesn't |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2413 exist either, and we can end up in x_report_frame_params with a |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2414 null widget which gives a segfault. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2415 if (FRAME_FACE_CACHE (f)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2416 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2417 XSETFRAME (frame, f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2418 call1 (Qface_set_after_frame_default, frame); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2419 } |
13434 | 2420 } |
2421 | |
2422 void | |
2423 x_set_border_width (f, arg, oldval) | |
2424 struct frame *f; | |
2425 Lisp_Object arg, oldval; | |
2426 { | |
2427 CHECK_NUMBER (arg, 0); | |
2428 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2429 if (XINT (arg) == f->output_data.w32->border_width) |
13434 | 2430 return; |
2431 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2432 if (FRAME_W32_WINDOW (f) != 0) |
13434 | 2433 error ("Cannot change the border width of a window"); |
2434 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2435 f->output_data.w32->border_width = XINT (arg); |
13434 | 2436 } |
2437 | |
2438 void | |
2439 x_set_internal_border_width (f, arg, oldval) | |
2440 struct frame *f; | |
2441 Lisp_Object arg, oldval; | |
2442 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2443 int old = f->output_data.w32->internal_border_width; |
13434 | 2444 |
2445 CHECK_NUMBER (arg, 0); | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2446 f->output_data.w32->internal_border_width = XINT (arg); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2447 if (f->output_data.w32->internal_border_width < 0) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2448 f->output_data.w32->internal_border_width = 0; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2449 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2450 if (f->output_data.w32->internal_border_width == old) |
13434 | 2451 return; |
2452 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2453 if (FRAME_W32_WINDOW (f) != 0) |
13434 | 2454 { |
2455 x_set_window_size (f, 0, f->width, f->height); | |
2456 SET_FRAME_GARBAGED (f); | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2457 do_pending_window_change (0); |
13434 | 2458 } |
2459 } | |
2460 | |
2461 void | |
2462 x_set_visibility (f, value, oldval) | |
2463 struct frame *f; | |
2464 Lisp_Object value, oldval; | |
2465 { | |
2466 Lisp_Object frame; | |
2467 XSETFRAME (frame, f); | |
2468 | |
2469 if (NILP (value)) | |
2470 Fmake_frame_invisible (frame, Qt); | |
2471 else if (EQ (value, Qicon)) | |
2472 Ficonify_frame (frame); | |
2473 else | |
2474 Fmake_frame_visible (frame); | |
2475 } | |
2476 | |
2477 void | |
2478 x_set_menu_bar_lines (f, value, oldval) | |
2479 struct frame *f; | |
2480 Lisp_Object value, oldval; | |
2481 { | |
2482 int nlines; | |
2483 int olines = FRAME_MENU_BAR_LINES (f); | |
2484 | |
2485 /* Right now, menu bars don't work properly in minibuf-only frames; | |
2486 most of the commands try to apply themselves to the minibuffer | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2487 frame itself, and get an error because you can't switch buffers |
13434 | 2488 in or split the minibuffer window. */ |
2489 if (FRAME_MINIBUF_ONLY_P (f)) | |
2490 return; | |
2491 | |
2492 if (INTEGERP (value)) | |
2493 nlines = XINT (value); | |
2494 else | |
2495 nlines = 0; | |
2496 | |
2497 FRAME_MENU_BAR_LINES (f) = 0; | |
2498 if (nlines) | |
2499 FRAME_EXTERNAL_MENU_BAR (f) = 1; | |
2500 else | |
2501 { | |
2502 if (FRAME_EXTERNAL_MENU_BAR (f) == 1) | |
2503 free_frame_menubar (f); | |
2504 FRAME_EXTERNAL_MENU_BAR (f) = 0; | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2505 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2506 /* Adjust the frame size so that the client (text) dimensions |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2507 remain the same. This depends on FRAME_EXTERNAL_MENU_BAR being |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2508 set correctly. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2509 x_set_window_size (f, 0, FRAME_WIDTH (f), FRAME_HEIGHT (f)); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2510 do_pending_window_change (0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2511 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2512 adjust_glyphs (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2513 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2514 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2515 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2516 /* Set the number of lines used for the tool bar of frame F to VALUE. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2517 VALUE not an integer, or < 0 means set the lines to zero. OLDVAL |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2518 is the old number of tool bar lines. This function changes the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2519 height of all windows on frame F to match the new tool bar height. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2520 The frame's height doesn't change. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2521 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2522 void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2523 x_set_tool_bar_lines (f, value, oldval) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2524 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2525 Lisp_Object value, oldval; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2526 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2527 int delta, nlines; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2528 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2529 /* Use VALUE only if an integer >= 0. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2530 if (INTEGERP (value) && XINT (value) >= 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2531 nlines = XFASTINT (value); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2532 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2533 nlines = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2534 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2535 /* Make sure we redisplay all windows in this frame. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2536 ++windows_or_buffers_changed; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2537 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2538 delta = nlines - FRAME_TOOL_BAR_LINES (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2539 FRAME_TOOL_BAR_LINES (f) = nlines; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2540 x_set_window_size (f, 0, FRAME_WIDTH (f), FRAME_HEIGHT (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2541 do_pending_window_change (0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2542 adjust_glyphs (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2543 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2544 |
13434 | 2545 |
2546 /* Change the name of frame F to NAME. If NAME is nil, set F's name to | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2547 w32_id_name. |
13434 | 2548 |
2549 If EXPLICIT is non-zero, that indicates that lisp code is setting the | |
2550 name; if NAME is a string, set F's name to NAME and set | |
2551 F->explicit_name; if NAME is Qnil, then clear F->explicit_name. | |
2552 | |
2553 If EXPLICIT is zero, that indicates that Emacs redisplay code is | |
2554 suggesting a new name, which lisp code should override; if | |
2555 F->explicit_name is set, ignore the new name; otherwise, set it. */ | |
2556 | |
2557 void | |
2558 x_set_name (f, name, explicit) | |
2559 struct frame *f; | |
2560 Lisp_Object name; | |
2561 int explicit; | |
2562 { | |
2563 /* Make sure that requests from lisp code override requests from | |
2564 Emacs redisplay code. */ | |
2565 if (explicit) | |
2566 { | |
2567 /* If we're switching from explicit to implicit, we had better | |
2568 update the mode lines and thereby update the title. */ | |
2569 if (f->explicit_name && NILP (name)) | |
2570 update_mode_lines = 1; | |
2571 | |
2572 f->explicit_name = ! NILP (name); | |
2573 } | |
2574 else if (f->explicit_name) | |
2575 return; | |
2576 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2577 /* If NAME is nil, set the name to the w32_id_name. */ |
13434 | 2578 if (NILP (name)) |
2579 { | |
2580 /* Check for no change needed in this very common case | |
2581 before we do any consing. */ | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2582 if (!strcmp (FRAME_W32_DISPLAY_INFO (f)->w32_id_name, |
13434 | 2583 XSTRING (f->name)->data)) |
2584 return; | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2585 name = build_string (FRAME_W32_DISPLAY_INFO (f)->w32_id_name); |
13434 | 2586 } |
2587 else | |
2588 CHECK_STRING (name, 0); | |
2589 | |
2590 /* Don't change the name if it's already NAME. */ | |
2591 if (! NILP (Fstring_equal (name, f->name))) | |
2592 return; | |
2593 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2594 f->name = name; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2595 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2596 /* For setting the frame title, the title parameter should override |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2597 the name parameter. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2598 if (! NILP (f->title)) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2599 name = f->title; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2600 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2601 if (FRAME_W32_WINDOW (f)) |
13434 | 2602 { |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2603 if (STRING_MULTIBYTE (name)) |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2604 name = ENCODE_SYSTEM (name); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2605 |
13434 | 2606 BLOCK_INPUT; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2607 SetWindowText(FRAME_W32_WINDOW (f), XSTRING (name)->data); |
13434 | 2608 UNBLOCK_INPUT; |
2609 } | |
2610 } | |
2611 | |
2612 /* This function should be called when the user's lisp code has | |
2613 specified a name for the frame; the name will override any set by the | |
2614 redisplay code. */ | |
2615 void | |
2616 x_explicitly_set_name (f, arg, oldval) | |
2617 FRAME_PTR f; | |
2618 Lisp_Object arg, oldval; | |
2619 { | |
2620 x_set_name (f, arg, 1); | |
2621 } | |
2622 | |
2623 /* This function should be called by Emacs redisplay code to set the | |
2624 name; names set this way will never override names set by the user's | |
2625 lisp code. */ | |
2626 void | |
2627 x_implicitly_set_name (f, arg, oldval) | |
2628 FRAME_PTR f; | |
2629 Lisp_Object arg, oldval; | |
2630 { | |
2631 x_set_name (f, arg, 0); | |
2632 } | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2633 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2634 /* Change the title of frame F to NAME. |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2635 If NAME is nil, use the frame name as the title. |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2636 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2637 If EXPLICIT is non-zero, that indicates that lisp code is setting the |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2638 name; if NAME is a string, set F's name to NAME and set |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2639 F->explicit_name; if NAME is Qnil, then clear F->explicit_name. |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2640 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2641 If EXPLICIT is zero, that indicates that Emacs redisplay code is |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2642 suggesting a new name, which lisp code should override; if |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2643 F->explicit_name is set, ignore the new name; otherwise, set it. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2644 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2645 void |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2646 x_set_title (f, name, old_name) |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2647 struct frame *f; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2648 Lisp_Object name, old_name; |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2649 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2650 /* Don't change the title if it's already NAME. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2651 if (EQ (name, f->title)) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2652 return; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2653 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2654 update_mode_lines = 1; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2655 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2656 f->title = name; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2657 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2658 if (NILP (name)) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2659 name = f->name; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2660 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2661 if (FRAME_W32_WINDOW (f)) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2662 { |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2663 if (STRING_MULTIBYTE (name)) |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2664 name = ENCODE_SYSTEM (name); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2665 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2666 BLOCK_INPUT; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2667 SetWindowText(FRAME_W32_WINDOW (f), XSTRING (name)->data); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2668 UNBLOCK_INPUT; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2669 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2670 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
2671 |
13434 | 2672 void |
2673 x_set_autoraise (f, arg, oldval) | |
2674 struct frame *f; | |
2675 Lisp_Object arg, oldval; | |
2676 { | |
2677 f->auto_raise = !EQ (Qnil, arg); | |
2678 } | |
2679 | |
2680 void | |
2681 x_set_autolower (f, arg, oldval) | |
2682 struct frame *f; | |
2683 Lisp_Object arg, oldval; | |
2684 { | |
2685 f->auto_lower = !EQ (Qnil, arg); | |
2686 } | |
2687 | |
2688 void | |
2689 x_set_unsplittable (f, arg, oldval) | |
2690 struct frame *f; | |
2691 Lisp_Object arg, oldval; | |
2692 { | |
2693 f->no_split = !NILP (arg); | |
2694 } | |
2695 | |
2696 void | |
2697 x_set_vertical_scroll_bars (f, arg, oldval) | |
2698 struct frame *f; | |
2699 Lisp_Object arg, oldval; | |
2700 { | |
16259
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
2701 if ((EQ (arg, Qleft) && FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) |
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
2702 || (EQ (arg, Qright) && FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT (f)) |
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
2703 || (NILP (arg) && FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
2704 || (!NILP (arg) && ! FRAME_HAS_VERTICAL_SCROLL_BARS (f))) |
13434 | 2705 { |
16259
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
2706 FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = NILP (arg) ? |
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
2707 vertical_scroll_bar_none : |
21735
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
2708 /* Put scroll bars on the right by default, as is conventional |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
2709 on MS-Windows. */ |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
2710 EQ (Qleft, arg) |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
2711 ? vertical_scroll_bar_left |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
2712 : vertical_scroll_bar_right; |
13434 | 2713 |
2714 /* We set this parameter before creating the window for the | |
2715 frame, so we can get the geometry right from the start. | |
2716 However, if the window hasn't been created yet, we shouldn't | |
2717 call x_set_window_size. */ | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2718 if (FRAME_W32_WINDOW (f)) |
13434 | 2719 x_set_window_size (f, 0, FRAME_WIDTH (f), FRAME_HEIGHT (f)); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2720 do_pending_window_change (0); |
13434 | 2721 } |
2722 } | |
2723 | |
2724 void | |
2725 x_set_scroll_bar_width (f, arg, oldval) | |
2726 struct frame *f; | |
2727 Lisp_Object arg, oldval; | |
2728 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2729 int wid = FONT_WIDTH (f->output_data.w32->font); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2730 |
13434 | 2731 if (NILP (arg)) |
2732 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2733 FRAME_SCROLL_BAR_PIXEL_WIDTH (f) = GetSystemMetrics (SM_CXVSCROLL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2734 FRAME_SCROLL_BAR_COLS (f) = (FRAME_SCROLL_BAR_PIXEL_WIDTH (f) + |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2735 wid - 1) / wid; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2736 if (FRAME_W32_WINDOW (f)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2737 x_set_window_size (f, 0, FRAME_WIDTH (f), FRAME_HEIGHT (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2738 do_pending_window_change (0); |
13434 | 2739 } |
2740 else if (INTEGERP (arg) && XINT (arg) > 0 | |
2741 && XFASTINT (arg) != FRAME_SCROLL_BAR_PIXEL_WIDTH (f)) | |
2742 { | |
2743 FRAME_SCROLL_BAR_PIXEL_WIDTH (f) = XFASTINT (arg); | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2744 FRAME_SCROLL_BAR_COLS (f) = (FRAME_SCROLL_BAR_PIXEL_WIDTH (f) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2745 + wid-1) / wid; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
2746 if (FRAME_W32_WINDOW (f)) |
13434 | 2747 x_set_window_size (f, 0, FRAME_WIDTH (f), FRAME_HEIGHT (f)); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2748 do_pending_window_change (0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2749 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2750 change_frame_size (f, 0, FRAME_WIDTH (f), 0, 0, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2751 XWINDOW (FRAME_SELECTED_WINDOW (f))->cursor.hpos = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2752 XWINDOW (FRAME_SELECTED_WINDOW (f))->cursor.x = 0; |
13434 | 2753 } |
2754 | |
2755 /* Subroutines of creating an frame. */ | |
2756 | |
2757 /* Make sure that Vx_resource_name is set to a reasonable value. | |
2758 Fix it up, or set it to `emacs' if it is too hopeless. */ | |
2759 | |
2760 static void | |
2761 validate_x_resource_name () | |
2762 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2763 int len = 0; |
13434 | 2764 /* Number of valid characters in the resource name. */ |
2765 int good_count = 0; | |
2766 /* Number of invalid characters in the resource name. */ | |
2767 int bad_count = 0; | |
2768 Lisp_Object new; | |
2769 int i; | |
2770 | |
2771 if (STRINGP (Vx_resource_name)) | |
2772 { | |
2773 unsigned char *p = XSTRING (Vx_resource_name)->data; | |
2774 int i; | |
2775 | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2776 len = STRING_BYTES (XSTRING (Vx_resource_name)); |
13434 | 2777 |
2778 /* Only letters, digits, - and _ are valid in resource names. | |
2779 Count the valid characters and count the invalid ones. */ | |
2780 for (i = 0; i < len; i++) | |
2781 { | |
2782 int c = p[i]; | |
2783 if (! ((c >= 'a' && c <= 'z') | |
2784 || (c >= 'A' && c <= 'Z') | |
2785 || (c >= '0' && c <= '9') | |
2786 || c == '-' || c == '_')) | |
2787 bad_count++; | |
2788 else | |
2789 good_count++; | |
2790 } | |
2791 } | |
2792 else | |
2793 /* Not a string => completely invalid. */ | |
2794 bad_count = 5, good_count = 0; | |
2795 | |
2796 /* If name is valid already, return. */ | |
2797 if (bad_count == 0) | |
2798 return; | |
2799 | |
2800 /* If name is entirely invalid, or nearly so, use `emacs'. */ | |
2801 if (good_count == 0 | |
2802 || (good_count == 1 && bad_count > 0)) | |
2803 { | |
2804 Vx_resource_name = build_string ("emacs"); | |
2805 return; | |
2806 } | |
2807 | |
2808 /* Name is partly valid. Copy it and replace the invalid characters | |
2809 with underscores. */ | |
2810 | |
2811 Vx_resource_name = new = Fcopy_sequence (Vx_resource_name); | |
2812 | |
2813 for (i = 0; i < len; i++) | |
2814 { | |
2815 int c = XSTRING (new)->data[i]; | |
2816 if (! ((c >= 'a' && c <= 'z') | |
2817 || (c >= 'A' && c <= 'Z') | |
2818 || (c >= '0' && c <= '9') | |
2819 || c == '-' || c == '_')) | |
2820 XSTRING (new)->data[i] = '_'; | |
2821 } | |
2822 } | |
2823 | |
2824 | |
2825 extern char *x_get_string_resource (); | |
2826 | |
2827 DEFUN ("x-get-resource", Fx_get_resource, Sx_get_resource, 2, 4, 0, | |
2828 "Return the value of ATTRIBUTE, of class CLASS, from the X defaults database.\n\ | |
2829 This uses `INSTANCE.ATTRIBUTE' as the key and `Emacs.CLASS' as the\n\ | |
2830 class, where INSTANCE is the name under which Emacs was invoked, or\n\ | |
2831 the name specified by the `-name' or `-rn' command-line arguments.\n\ | |
2832 \n\ | |
2833 The optional arguments COMPONENT and SUBCLASS add to the key and the\n\ | |
2834 class, respectively. You must specify both of them or neither.\n\ | |
2835 If you specify them, the key is `INSTANCE.COMPONENT.ATTRIBUTE'\n\ | |
2836 and the class is `Emacs.CLASS.SUBCLASS'.") | |
2837 (attribute, class, component, subclass) | |
2838 Lisp_Object attribute, class, component, subclass; | |
2839 { | |
2840 register char *value; | |
2841 char *name_key; | |
2842 char *class_key; | |
2843 | |
2844 CHECK_STRING (attribute, 0); | |
2845 CHECK_STRING (class, 0); | |
2846 | |
2847 if (!NILP (component)) | |
2848 CHECK_STRING (component, 1); | |
2849 if (!NILP (subclass)) | |
2850 CHECK_STRING (subclass, 2); | |
2851 if (NILP (component) != NILP (subclass)) | |
2852 error ("x-get-resource: must specify both COMPONENT and SUBCLASS or neither"); | |
2853 | |
2854 validate_x_resource_name (); | |
2855 | |
2856 /* Allocate space for the components, the dots which separate them, | |
2857 and the final '\0'. Make them big enough for the worst case. */ | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2858 name_key = (char *) alloca (STRING_BYTES (XSTRING (Vx_resource_name)) |
13434 | 2859 + (STRINGP (component) |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2860 ? STRING_BYTES (XSTRING (component)) : 0) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2861 + STRING_BYTES (XSTRING (attribute)) |
13434 | 2862 + 3); |
2863 | |
2864 class_key = (char *) alloca ((sizeof (EMACS_CLASS) - 1) | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2865 + STRING_BYTES (XSTRING (class)) |
13434 | 2866 + (STRINGP (subclass) |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2867 ? STRING_BYTES (XSTRING (subclass)) : 0) |
13434 | 2868 + 3); |
2869 | |
2870 /* Start with emacs.FRAMENAME for the name (the specific one) | |
2871 and with `Emacs' for the class key (the general one). */ | |
2872 strcpy (name_key, XSTRING (Vx_resource_name)->data); | |
2873 strcpy (class_key, EMACS_CLASS); | |
2874 | |
2875 strcat (class_key, "."); | |
2876 strcat (class_key, XSTRING (class)->data); | |
2877 | |
2878 if (!NILP (component)) | |
2879 { | |
2880 strcat (class_key, "."); | |
2881 strcat (class_key, XSTRING (subclass)->data); | |
2882 | |
2883 strcat (name_key, "."); | |
2884 strcat (name_key, XSTRING (component)->data); | |
2885 } | |
2886 | |
2887 strcat (name_key, "."); | |
2888 strcat (name_key, XSTRING (attribute)->data); | |
2889 | |
2890 value = x_get_string_resource (Qnil, | |
2891 name_key, class_key); | |
2892 | |
2893 if (value != (char *) 0) | |
2894 return build_string (value); | |
2895 else | |
2896 return Qnil; | |
2897 } | |
2898 | |
2899 /* Used when C code wants a resource value. */ | |
2900 | |
2901 char * | |
2902 x_get_resource_string (attribute, class) | |
2903 char *attribute, *class; | |
2904 { | |
2905 char *name_key; | |
2906 char *class_key; | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2907 struct frame *sf = SELECTED_FRAME (); |
13434 | 2908 |
2909 /* Allocate space for the components, the dots which separate them, | |
2910 and the final '\0'. */ | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
2911 name_key = (char *) alloca (STRING_BYTES (XSTRING (Vinvocation_name)) |
13434 | 2912 + strlen (attribute) + 2); |
2913 class_key = (char *) alloca ((sizeof (EMACS_CLASS) - 1) | |
2914 + strlen (class) + 2); | |
2915 | |
2916 sprintf (name_key, "%s.%s", | |
2917 XSTRING (Vinvocation_name)->data, | |
2918 attribute); | |
2919 sprintf (class_key, "%s.%s", EMACS_CLASS, class); | |
2920 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2921 return x_get_string_resource (sf, name_key, class_key); |
13434 | 2922 } |
2923 | |
2924 /* Types we might convert a resource string into. */ | |
2925 enum resource_types | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2926 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2927 RES_TYPE_NUMBER, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2928 RES_TYPE_FLOAT, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2929 RES_TYPE_BOOLEAN, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2930 RES_TYPE_STRING, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2931 RES_TYPE_SYMBOL |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2932 }; |
13434 | 2933 |
2934 /* Return the value of parameter PARAM. | |
2935 | |
2936 First search ALIST, then Vdefault_frame_alist, then the X defaults | |
2937 database, using ATTRIBUTE as the attribute name and CLASS as its class. | |
2938 | |
2939 Convert the resource to the type specified by desired_type. | |
2940 | |
2941 If no default is specified, return Qunbound. If you call | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2942 w32_get_arg, make sure you deal with Qunbound in a reasonable way, |
13434 | 2943 and don't let it get stored in any Lisp-visible variables! */ |
2944 | |
2945 static Lisp_Object | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2946 w32_get_arg (alist, param, attribute, class, type) |
13434 | 2947 Lisp_Object alist, param; |
2948 char *attribute; | |
2949 char *class; | |
2950 enum resource_types type; | |
2951 { | |
2952 register Lisp_Object tem; | |
2953 | |
2954 tem = Fassq (param, alist); | |
2955 if (EQ (tem, Qnil)) | |
2956 tem = Fassq (param, Vdefault_frame_alist); | |
2957 if (EQ (tem, Qnil)) | |
2958 { | |
2959 | |
2960 if (attribute) | |
2961 { | |
2962 tem = Fx_get_resource (build_string (attribute), | |
2963 build_string (class), | |
2964 Qnil, Qnil); | |
2965 | |
2966 if (NILP (tem)) | |
2967 return Qunbound; | |
2968 | |
2969 switch (type) | |
2970 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2971 case RES_TYPE_NUMBER: |
13434 | 2972 return make_number (atoi (XSTRING (tem)->data)); |
2973 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2974 case RES_TYPE_FLOAT: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2975 return make_float (atof (XSTRING (tem)->data)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2976 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2977 case RES_TYPE_BOOLEAN: |
13434 | 2978 tem = Fdowncase (tem); |
2979 if (!strcmp (XSTRING (tem)->data, "on") | |
2980 || !strcmp (XSTRING (tem)->data, "true")) | |
2981 return Qt; | |
2982 else | |
2983 return Qnil; | |
2984 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2985 case RES_TYPE_STRING: |
13434 | 2986 return tem; |
2987 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2988 case RES_TYPE_SYMBOL: |
13434 | 2989 /* As a special case, we map the values `true' and `on' |
2990 to Qt, and `false' and `off' to Qnil. */ | |
2991 { | |
2992 Lisp_Object lower; | |
2993 lower = Fdowncase (tem); | |
2994 if (!strcmp (XSTRING (lower)->data, "on") | |
2995 || !strcmp (XSTRING (lower)->data, "true")) | |
2996 return Qt; | |
2997 else if (!strcmp (XSTRING (lower)->data, "off") | |
2998 || !strcmp (XSTRING (lower)->data, "false")) | |
2999 return Qnil; | |
3000 else | |
3001 return Fintern (tem, Qnil); | |
3002 } | |
3003 | |
3004 default: | |
3005 abort (); | |
3006 } | |
3007 } | |
3008 else | |
3009 return Qunbound; | |
3010 } | |
3011 return Fcdr (tem); | |
3012 } | |
3013 | |
3014 /* Record in frame F the specified or default value according to ALIST | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
3015 of the parameter named PROP (a Lisp symbol). |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
3016 If no value is specified for PROP, look for an X default for XPROP |
13434 | 3017 on the frame named NAME. |
3018 If that is not found either, use the value DEFLT. */ | |
3019 | |
3020 static Lisp_Object | |
3021 x_default_parameter (f, alist, prop, deflt, xprop, xclass, type) | |
3022 struct frame *f; | |
3023 Lisp_Object alist; | |
3024 Lisp_Object prop; | |
3025 Lisp_Object deflt; | |
3026 char *xprop; | |
3027 char *xclass; | |
3028 enum resource_types type; | |
3029 { | |
3030 Lisp_Object tem; | |
3031 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3032 tem = w32_get_arg (alist, prop, xprop, xclass, type); |
13434 | 3033 if (EQ (tem, Qunbound)) |
3034 tem = deflt; | |
3035 x_set_frame_parameters (f, Fcons (Fcons (prop, tem), Qnil)); | |
3036 return tem; | |
3037 } | |
3038 | |
3039 DEFUN ("x-parse-geometry", Fx_parse_geometry, Sx_parse_geometry, 1, 1, 0, | |
3040 "Parse an X-style geometry string STRING.\n\ | |
3041 Returns an alist of the form ((top . TOP), (left . LEFT) ... ).\n\ | |
3042 The properties returned may include `top', `left', `height', and `width'.\n\ | |
3043 The value of `left' or `top' may be an integer,\n\ | |
3044 or a list (+ N) meaning N pixels relative to top/left corner,\n\ | |
3045 or a list (- N) meaning -N pixels relative to bottom/right corner.") | |
3046 (string) | |
3047 Lisp_Object string; | |
3048 { | |
3049 int geometry, x, y; | |
3050 unsigned int width, height; | |
3051 Lisp_Object result; | |
3052 | |
3053 CHECK_STRING (string, 0); | |
3054 | |
3055 geometry = XParseGeometry ((char *) XSTRING (string)->data, | |
3056 &x, &y, &width, &height); | |
3057 | |
3058 result = Qnil; | |
3059 if (geometry & XValue) | |
3060 { | |
3061 Lisp_Object element; | |
3062 | |
3063 if (x >= 0 && (geometry & XNegative)) | |
3064 element = Fcons (Qleft, Fcons (Qminus, Fcons (make_number (-x), Qnil))); | |
3065 else if (x < 0 && ! (geometry & XNegative)) | |
3066 element = Fcons (Qleft, Fcons (Qplus, Fcons (make_number (x), Qnil))); | |
3067 else | |
3068 element = Fcons (Qleft, make_number (x)); | |
3069 result = Fcons (element, result); | |
3070 } | |
3071 | |
3072 if (geometry & YValue) | |
3073 { | |
3074 Lisp_Object element; | |
3075 | |
3076 if (y >= 0 && (geometry & YNegative)) | |
3077 element = Fcons (Qtop, Fcons (Qminus, Fcons (make_number (-y), Qnil))); | |
3078 else if (y < 0 && ! (geometry & YNegative)) | |
3079 element = Fcons (Qtop, Fcons (Qplus, Fcons (make_number (y), Qnil))); | |
3080 else | |
3081 element = Fcons (Qtop, make_number (y)); | |
3082 result = Fcons (element, result); | |
3083 } | |
3084 | |
3085 if (geometry & WidthValue) | |
3086 result = Fcons (Fcons (Qwidth, make_number (width)), result); | |
3087 if (geometry & HeightValue) | |
3088 result = Fcons (Fcons (Qheight, make_number (height)), result); | |
3089 | |
3090 return result; | |
3091 } | |
3092 | |
3093 /* Calculate the desired size and position of this window, | |
3094 and return the flags saying which aspects were specified. | |
3095 | |
3096 This function does not make the coordinates positive. */ | |
3097 | |
3098 #define DEFAULT_ROWS 40 | |
3099 #define DEFAULT_COLS 80 | |
3100 | |
3101 static int | |
3102 x_figure_window_size (f, parms) | |
3103 struct frame *f; | |
3104 Lisp_Object parms; | |
3105 { | |
3106 register Lisp_Object tem0, tem1, tem2; | |
3107 long window_prompting = 0; | |
3108 | |
3109 /* Default values if we fall through. | |
3110 Actually, if that happens we should get | |
3111 window manager prompting. */ | |
16259
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
3112 SET_FRAME_WIDTH (f, DEFAULT_COLS); |
13434 | 3113 f->height = DEFAULT_ROWS; |
3114 /* Window managers expect that if program-specified | |
3115 positions are not (0,0), they're intentional, not defaults. */ | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3116 f->output_data.w32->top_pos = 0; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3117 f->output_data.w32->left_pos = 0; |
13434 | 3118 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3119 tem0 = w32_get_arg (parms, Qheight, 0, 0, RES_TYPE_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3120 tem1 = w32_get_arg (parms, Qwidth, 0, 0, RES_TYPE_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3121 tem2 = w32_get_arg (parms, Quser_size, 0, 0, RES_TYPE_NUMBER); |
13434 | 3122 if (! EQ (tem0, Qunbound) || ! EQ (tem1, Qunbound)) |
3123 { | |
3124 if (!EQ (tem0, Qunbound)) | |
3125 { | |
3126 CHECK_NUMBER (tem0, 0); | |
3127 f->height = XINT (tem0); | |
3128 } | |
3129 if (!EQ (tem1, Qunbound)) | |
3130 { | |
3131 CHECK_NUMBER (tem1, 0); | |
16259
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
3132 SET_FRAME_WIDTH (f, XINT (tem1)); |
13434 | 3133 } |
3134 if (!NILP (tem2) && !EQ (tem2, Qunbound)) | |
3135 window_prompting |= USSize; | |
3136 else | |
3137 window_prompting |= PSize; | |
3138 } | |
3139 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3140 f->output_data.w32->vertical_scroll_bar_extra |
13434 | 3141 = (!FRAME_HAS_VERTICAL_SCROLL_BARS (f) |
3142 ? 0 | |
3143 : FRAME_SCROLL_BAR_PIXEL_WIDTH (f) > 0 | |
3144 ? FRAME_SCROLL_BAR_PIXEL_WIDTH (f) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3145 : (FRAME_SCROLL_BAR_COLS (f) * FONT_WIDTH (f->output_data.w32->font))); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3146 f->output_data.w32->flags_areas_extra |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3147 = FRAME_FLAGS_AREA_WIDTH (f); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3148 f->output_data.w32->pixel_width = CHAR_TO_PIXEL_WIDTH (f, f->width); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3149 f->output_data.w32->pixel_height = CHAR_TO_PIXEL_HEIGHT (f, f->height); |
13434 | 3150 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3151 tem0 = w32_get_arg (parms, Qtop, 0, 0, RES_TYPE_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3152 tem1 = w32_get_arg (parms, Qleft, 0, 0, RES_TYPE_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3153 tem2 = w32_get_arg (parms, Quser_position, 0, 0, RES_TYPE_NUMBER); |
13434 | 3154 if (! EQ (tem0, Qunbound) || ! EQ (tem1, Qunbound)) |
3155 { | |
3156 if (EQ (tem0, Qminus)) | |
3157 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3158 f->output_data.w32->top_pos = 0; |
13434 | 3159 window_prompting |= YNegative; |
3160 } | |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3161 else if (CONSP (tem0) && EQ (XCAR (tem0), Qminus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3162 && CONSP (XCDR (tem0)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3163 && INTEGERP (XCAR (XCDR (tem0)))) |
13434 | 3164 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3165 f->output_data.w32->top_pos = - XINT (XCAR (XCDR (tem0))); |
13434 | 3166 window_prompting |= YNegative; |
3167 } | |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3168 else if (CONSP (tem0) && EQ (XCAR (tem0), Qplus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3169 && CONSP (XCDR (tem0)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3170 && INTEGERP (XCAR (XCDR (tem0)))) |
13434 | 3171 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3172 f->output_data.w32->top_pos = XINT (XCAR (XCDR (tem0))); |
13434 | 3173 } |
3174 else if (EQ (tem0, Qunbound)) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3175 f->output_data.w32->top_pos = 0; |
13434 | 3176 else |
3177 { | |
3178 CHECK_NUMBER (tem0, 0); | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3179 f->output_data.w32->top_pos = XINT (tem0); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3180 if (f->output_data.w32->top_pos < 0) |
13434 | 3181 window_prompting |= YNegative; |
3182 } | |
3183 | |
3184 if (EQ (tem1, Qminus)) | |
3185 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3186 f->output_data.w32->left_pos = 0; |
13434 | 3187 window_prompting |= XNegative; |
3188 } | |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3189 else if (CONSP (tem1) && EQ (XCAR (tem1), Qminus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3190 && CONSP (XCDR (tem1)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3191 && INTEGERP (XCAR (XCDR (tem1)))) |
13434 | 3192 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3193 f->output_data.w32->left_pos = - XINT (XCAR (XCDR (tem1))); |
13434 | 3194 window_prompting |= XNegative; |
3195 } | |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3196 else if (CONSP (tem1) && EQ (XCAR (tem1), Qplus) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3197 && CONSP (XCDR (tem1)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3198 && INTEGERP (XCAR (XCDR (tem1)))) |
13434 | 3199 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
3200 f->output_data.w32->left_pos = XINT (XCAR (XCDR (tem1))); |
13434 | 3201 } |
3202 else if (EQ (tem1, Qunbound)) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3203 f->output_data.w32->left_pos = 0; |
13434 | 3204 else |
3205 { | |
3206 CHECK_NUMBER (tem1, 0); | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3207 f->output_data.w32->left_pos = XINT (tem1); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3208 if (f->output_data.w32->left_pos < 0) |
13434 | 3209 window_prompting |= XNegative; |
3210 } | |
3211 | |
3212 if (!NILP (tem2) && ! EQ (tem2, Qunbound)) | |
3213 window_prompting |= USPosition; | |
3214 else | |
3215 window_prompting |= PPosition; | |
3216 } | |
3217 | |
3218 return window_prompting; | |
3219 } | |
3220 | |
3221 | |
3222 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3223 extern LRESULT CALLBACK w32_wnd_proc (); |
13434 | 3224 |
3225 BOOL | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3226 w32_init_class (hinst) |
13434 | 3227 HINSTANCE hinst; |
3228 { | |
3229 WNDCLASS wc; | |
3230 | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3231 wc.style = CS_HREDRAW | CS_VREDRAW; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3232 wc.lpfnWndProc = (WNDPROC) w32_wnd_proc; |
13434 | 3233 wc.cbClsExtra = 0; |
3234 wc.cbWndExtra = WND_EXTRA_BYTES; | |
3235 wc.hInstance = hinst; | |
3236 wc.hIcon = LoadIcon (hinst, EMACS_CLASS); | |
3237 wc.hCursor = LoadCursor (NULL, IDC_ARROW); | |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
3238 wc.hbrBackground = NULL; /* GetStockObject (WHITE_BRUSH); */ |
13434 | 3239 wc.lpszMenuName = NULL; |
3240 wc.lpszClassName = EMACS_CLASS; | |
3241 | |
3242 return (RegisterClass (&wc)); | |
3243 } | |
3244 | |
3245 HWND | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3246 w32_createscrollbar (f, bar) |
13434 | 3247 struct frame *f; |
3248 struct scroll_bar * bar; | |
3249 { | |
3250 return (CreateWindow ("SCROLLBAR", "", SBS_VERT | WS_CHILD | WS_VISIBLE, | |
3251 /* Position and size of scroll bar. */ | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3252 XINT(bar->left) + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3253 XINT(bar->top), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3254 XINT(bar->width) - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3255 XINT(bar->height), |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3256 FRAME_W32_WINDOW (f), |
13434 | 3257 NULL, |
3258 hinst, | |
3259 NULL)); | |
3260 } | |
3261 | |
3262 void | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3263 w32_createwindow (f) |
13434 | 3264 struct frame *f; |
3265 { | |
3266 HWND hwnd; | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3267 RECT rect; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3268 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3269 rect.left = rect.top = 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3270 rect.right = PIXEL_WIDTH (f); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3271 rect.bottom = PIXEL_HEIGHT (f); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3272 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3273 AdjustWindowRect (&rect, f->output_data.w32->dwStyle, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3274 FRAME_EXTERNAL_MENU_BAR (f)); |
13434 | 3275 |
3276 /* Do first time app init */ | |
3277 | |
3278 if (!hprevinst) | |
3279 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3280 w32_init_class (hinst); |
13434 | 3281 } |
3282 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3283 FRAME_W32_WINDOW (f) = hwnd |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3284 = CreateWindow (EMACS_CLASS, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3285 f->namebuf, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3286 f->output_data.w32->dwStyle | WS_CLIPCHILDREN, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3287 f->output_data.w32->left_pos, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3288 f->output_data.w32->top_pos, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3289 rect.right - rect.left, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3290 rect.bottom - rect.top, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3291 NULL, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3292 NULL, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3293 hinst, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3294 NULL); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3295 |
13434 | 3296 if (hwnd) |
3297 { | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3298 SetWindowLong (hwnd, WND_FONTWIDTH_INDEX, FONT_WIDTH (f->output_data.w32->font)); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3299 SetWindowLong (hwnd, WND_LINEHEIGHT_INDEX, f->output_data.w32->line_height); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3300 SetWindowLong (hwnd, WND_BORDER_INDEX, f->output_data.w32->internal_border_width); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3301 SetWindowLong (hwnd, WND_SCROLLBAR_INDEX, f->output_data.w32->vertical_scroll_bar_extra); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
3302 SetWindowLong (hwnd, WND_BACKGROUND_INDEX, FRAME_BACKGROUND_PIXEL (f)); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3303 |
21884 | 3304 /* Enable drag-n-drop. */ |
3305 DragAcceptFiles (hwnd, TRUE); | |
3306 | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3307 /* Do this to discard the default setting specified by our parent. */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3308 ShowWindow (hwnd, SW_HIDE); |
13434 | 3309 } |
3310 } | |
3311 | |
3312 void | |
3313 my_post_msg (wmsg, hwnd, msg, wParam, lParam) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3314 W32Msg * wmsg; |
13434 | 3315 HWND hwnd; |
3316 UINT msg; | |
3317 WPARAM wParam; | |
3318 LPARAM lParam; | |
3319 { | |
3320 wmsg->msg.hwnd = hwnd; | |
3321 wmsg->msg.message = msg; | |
3322 wmsg->msg.wParam = wParam; | |
3323 wmsg->msg.lParam = lParam; | |
3324 wmsg->msg.time = GetMessageTime (); | |
3325 | |
3326 post_msg (wmsg); | |
3327 } | |
3328 | |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16602
diff
changeset
|
3329 /* GetKeyState and MapVirtualKey on Windows 95 do not actually distinguish |
14461
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3330 between left and right keys as advertised. We test for this |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3331 support dynamically, and set a flag when the support is absent. If |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3332 absent, we keep track of the left and right control and alt keys |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3333 ourselves. This is particularly necessary on keyboards that rely |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3334 upon the AltGr key, which is represented as having the left control |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3335 and right alt keys pressed. For these keyboards, we need to know |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3336 when the left alt key has been pressed in addition to the AltGr key |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3337 so that we can properly support M-AltGr-key sequences (such as M-@ |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3338 on Swedish keyboards). */ |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3339 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3340 #define EMACS_LCONTROL 0 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3341 #define EMACS_RCONTROL 1 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3342 #define EMACS_LMENU 2 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3343 #define EMACS_RMENU 3 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3344 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3345 static int modifiers[4]; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3346 static int modifiers_recorded; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3347 static int modifier_key_support_tested; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3348 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3349 static void |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3350 test_modifier_support (unsigned int wparam) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3351 { |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3352 unsigned int l, r; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3353 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3354 if (wparam != VK_CONTROL && wparam != VK_MENU) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3355 return; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3356 if (wparam == VK_CONTROL) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3357 { |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3358 l = VK_LCONTROL; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3359 r = VK_RCONTROL; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3360 } |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3361 else |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3362 { |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3363 l = VK_LMENU; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3364 r = VK_RMENU; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3365 } |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3366 if (!(GetKeyState (l) & 0x8000) && !(GetKeyState (r) & 0x8000)) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3367 modifiers_recorded = 1; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3368 else |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3369 modifiers_recorded = 0; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3370 modifier_key_support_tested = 1; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3371 } |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3372 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3373 static void |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3374 record_keydown (unsigned int wparam, unsigned int lparam) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3375 { |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3376 int i; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3377 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3378 if (!modifier_key_support_tested) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3379 test_modifier_support (wparam); |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3380 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3381 if ((wparam != VK_CONTROL && wparam != VK_MENU) || !modifiers_recorded) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3382 return; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3383 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3384 if (wparam == VK_CONTROL) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3385 i = (lparam & 0x1000000) ? EMACS_RCONTROL : EMACS_LCONTROL; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3386 else |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3387 i = (lparam & 0x1000000) ? EMACS_RMENU : EMACS_LMENU; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3388 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3389 modifiers[i] = 1; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3390 } |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3391 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3392 static void |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3393 record_keyup (unsigned int wparam, unsigned int lparam) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3394 { |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3395 int i; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3396 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3397 if ((wparam != VK_CONTROL && wparam != VK_MENU) || !modifiers_recorded) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3398 return; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3399 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3400 if (wparam == VK_CONTROL) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3401 i = (lparam & 0x1000000) ? EMACS_RCONTROL : EMACS_LCONTROL; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3402 else |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3403 i = (lparam & 0x1000000) ? EMACS_RMENU : EMACS_LMENU; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3404 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3405 modifiers[i] = 0; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3406 } |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3407 |
14810
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
3408 /* Emacs can lose focus while a modifier key has been pressed. When |
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
3409 it regains focus, be conservative and clear all modifiers since |
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
3410 we cannot reconstruct the left and right modifier state. */ |
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
3411 static void |
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
3412 reset_modifiers () |
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
3413 { |
15314
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3414 SHORT ctrl, alt; |
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3415 |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3416 if (GetFocus () == NULL) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3417 /* Emacs doesn't have keyboard focus. Do nothing. */ |
14810
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
3418 return; |
15314
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3419 |
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3420 ctrl = GetAsyncKeyState (VK_CONTROL); |
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3421 alt = GetAsyncKeyState (VK_MENU); |
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3422 |
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3423 if (!(ctrl & 0x08000)) |
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3424 /* Clear any recorded control modifier state. */ |
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3425 modifiers[EMACS_RCONTROL] = modifiers[EMACS_LCONTROL] = 0; |
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3426 |
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3427 if (!(alt & 0x08000)) |
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3428 /* Clear any recorded alt modifier state. */ |
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3429 modifiers[EMACS_RMENU] = modifiers[EMACS_LMENU] = 0; |
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
3430 |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3431 /* Update the state of all modifier keys, because modifiers used in |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3432 hot-key combinations can get stuck on if Emacs loses focus as a |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3433 result of a hot-key being pressed. */ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3434 { |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3435 BYTE keystate[256]; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3436 |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3437 #define CURRENT_STATE(key) ((GetAsyncKeyState (key) & 0x8000) >> 8) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3438 |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3439 GetKeyboardState (keystate); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3440 keystate[VK_SHIFT] = CURRENT_STATE (VK_SHIFT); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3441 keystate[VK_CONTROL] = CURRENT_STATE (VK_CONTROL); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3442 keystate[VK_LCONTROL] = CURRENT_STATE (VK_LCONTROL); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3443 keystate[VK_RCONTROL] = CURRENT_STATE (VK_RCONTROL); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3444 keystate[VK_MENU] = CURRENT_STATE (VK_MENU); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3445 keystate[VK_LMENU] = CURRENT_STATE (VK_LMENU); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3446 keystate[VK_RMENU] = CURRENT_STATE (VK_RMENU); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3447 keystate[VK_LWIN] = CURRENT_STATE (VK_LWIN); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3448 keystate[VK_RWIN] = CURRENT_STATE (VK_RWIN); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3449 keystate[VK_APPS] = CURRENT_STATE (VK_APPS); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3450 SetKeyboardState (keystate); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3451 } |
14810
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
3452 } |
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
3453 |
15377
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3454 /* Synchronize modifier state with what is reported with the current |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3455 keystroke. Even if we cannot distinguish between left and right |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3456 modifier keys, we know that, if no modifiers are set, then neither |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3457 the left or right modifier should be set. */ |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3458 static void |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3459 sync_modifiers () |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3460 { |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3461 if (!modifiers_recorded) |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3462 return; |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3463 |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3464 if (!(GetKeyState (VK_CONTROL) & 0x8000)) |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3465 modifiers[EMACS_RCONTROL] = modifiers[EMACS_LCONTROL] = 0; |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3466 |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3467 if (!(GetKeyState (VK_MENU) & 0x8000)) |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3468 modifiers[EMACS_RMENU] = modifiers[EMACS_LMENU] = 0; |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3469 } |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
3470 |
14461
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3471 static int |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3472 modifier_set (int vkey) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3473 { |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3474 if (vkey == VK_CAPITAL || vkey == VK_SCROLL) |
15280
f39684fddaff
(modifier_set): Check toggle state of CapsLock even
Karl Heuer <kwzh@gnu.org>
parents:
15232
diff
changeset
|
3475 return (GetKeyState (vkey) & 0x1); |
14461
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3476 if (!modifiers_recorded) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3477 return (GetKeyState (vkey) & 0x8000); |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3478 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3479 switch (vkey) |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3480 { |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3481 case VK_LCONTROL: |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3482 return modifiers[EMACS_LCONTROL]; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3483 case VK_RCONTROL: |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3484 return modifiers[EMACS_RCONTROL]; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3485 case VK_LMENU: |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3486 return modifiers[EMACS_LMENU]; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3487 case VK_RMENU: |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3488 return modifiers[EMACS_RMENU]; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3489 } |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3490 return (GetKeyState (vkey) & 0x8000); |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3491 } |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3492 |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3493 /* Convert between the modifier bits W32 uses and the modifier bits |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3494 Emacs uses. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3495 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3496 unsigned int |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3497 w32_key_to_modifier (int key) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3498 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3499 Lisp_Object key_mapping; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3500 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3501 switch (key) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3502 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3503 case VK_LWIN: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3504 key_mapping = Vw32_lwindow_modifier; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3505 break; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3506 case VK_RWIN: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3507 key_mapping = Vw32_rwindow_modifier; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3508 break; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3509 case VK_APPS: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3510 key_mapping = Vw32_apps_modifier; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3511 break; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3512 case VK_SCROLL: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3513 key_mapping = Vw32_scroll_lock_modifier; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3514 break; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3515 default: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3516 key_mapping = Qnil; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3517 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3518 |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3519 /* NB. This code runs in the input thread, asychronously to the lisp |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3520 thread, so we must be careful to ensure access to lisp data is |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3521 thread-safe. The following code is safe because the modifier |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3522 variable values are updated atomically from lisp and symbols are |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3523 not relocated by GC. Also, we don't have to worry about seeing GC |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3524 markbits here. */ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3525 if (EQ (key_mapping, Qhyper)) |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3526 return hyper_modifier; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3527 if (EQ (key_mapping, Qsuper)) |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3528 return super_modifier; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3529 if (EQ (key_mapping, Qmeta)) |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3530 return meta_modifier; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3531 if (EQ (key_mapping, Qalt)) |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3532 return alt_modifier; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3533 if (EQ (key_mapping, Qctrl)) |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3534 return ctrl_modifier; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3535 if (EQ (key_mapping, Qcontrol)) /* synonym for ctrl */ |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3536 return ctrl_modifier; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3537 if (EQ (key_mapping, Qshift)) |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3538 return shift_modifier; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3539 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3540 /* Don't generate any modifier if not explicitly requested. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3541 return 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3542 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3543 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3544 unsigned int |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3545 w32_get_modifiers () |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3546 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3547 return ((modifier_set (VK_SHIFT) ? shift_modifier : 0) | |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3548 (modifier_set (VK_CONTROL) ? ctrl_modifier : 0) | |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3549 (modifier_set (VK_LWIN) ? w32_key_to_modifier (VK_LWIN) : 0) | |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3550 (modifier_set (VK_RWIN) ? w32_key_to_modifier (VK_RWIN) : 0) | |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3551 (modifier_set (VK_APPS) ? w32_key_to_modifier (VK_APPS) : 0) | |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3552 (modifier_set (VK_SCROLL) ? w32_key_to_modifier (VK_SCROLL) : 0) | |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3553 (modifier_set (VK_MENU) ? |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3554 ((NILP (Vw32_alt_is_meta)) ? alt_modifier : meta_modifier) : 0)); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3555 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3556 |
14461
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3557 /* We map the VK_* modifiers into console modifier constants |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3558 so that we can use the same routines to handle both console |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3559 and window input. */ |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3560 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3561 static int |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3562 construct_console_modifiers () |
14461
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3563 { |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3564 int mods; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3565 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3566 mods = 0; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3567 mods |= (modifier_set (VK_SHIFT)) ? SHIFT_PRESSED : 0; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3568 mods |= (modifier_set (VK_CAPITAL)) ? CAPSLOCK_ON : 0; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3569 mods |= (modifier_set (VK_SCROLL)) ? SCROLLLOCK_ON : 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3570 mods |= (modifier_set (VK_NUMLOCK)) ? NUMLOCK_ON : 0; |
14461
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3571 mods |= (modifier_set (VK_LCONTROL)) ? LEFT_CTRL_PRESSED : 0; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3572 mods |= (modifier_set (VK_RCONTROL)) ? RIGHT_CTRL_PRESSED : 0; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3573 mods |= (modifier_set (VK_LMENU)) ? LEFT_ALT_PRESSED : 0; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3574 mods |= (modifier_set (VK_RMENU)) ? RIGHT_ALT_PRESSED : 0; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3575 mods |= (modifier_set (VK_LWIN)) ? LEFT_WIN_PRESSED : 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3576 mods |= (modifier_set (VK_RWIN)) ? RIGHT_WIN_PRESSED : 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3577 mods |= (modifier_set (VK_APPS)) ? APPS_PRESSED : 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3578 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3579 return mods; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3580 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3581 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3582 static int |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3583 w32_get_key_modifiers (unsigned int wparam, unsigned int lparam) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3584 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3585 int mods; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3586 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3587 /* Convert to emacs modifiers. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3588 mods = w32_kbd_mods_to_emacs (construct_console_modifiers (), wparam); |
14461
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3589 |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3590 return mods; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3591 } |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
3592 |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3593 unsigned int |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3594 map_keypad_keys (unsigned int virt_key, unsigned int extended) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3595 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3596 if (virt_key < VK_CLEAR || virt_key > VK_DELETE) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3597 return virt_key; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3598 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3599 if (virt_key == VK_RETURN) |
14810
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
3600 return (extended ? VK_NUMPAD_ENTER : VK_RETURN); |
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
3601 |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3602 if (virt_key >= VK_PRIOR && virt_key <= VK_DOWN) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3603 return (!extended ? (VK_NUMPAD_PRIOR + (virt_key - VK_PRIOR)) : virt_key); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3604 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3605 if (virt_key == VK_INSERT || virt_key == VK_DELETE) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3606 return (!extended ? (VK_NUMPAD_INSERT + (virt_key - VK_INSERT)) : virt_key); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3607 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3608 if (virt_key == VK_CLEAR) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3609 return (!extended ? VK_NUMPAD_CLEAR : virt_key); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3610 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3611 return virt_key; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3612 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3613 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3614 /* List of special key combinations which w32 would normally capture, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3615 but emacs should grab instead. Not directly visible to lisp, to |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3616 simplify synchronization. Each item is an integer encoding a virtual |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3617 key code and modifier combination to capture. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3618 Lisp_Object w32_grabbed_keys; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3619 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3620 #define HOTKEY(vk,mods) make_number (((vk) & 255) | ((mods) << 8)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3621 #define HOTKEY_ID(k) (XFASTINT (k) & 0xbfff) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3622 #define HOTKEY_VK_CODE(k) (XFASTINT (k) & 255) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3623 #define HOTKEY_MODIFIERS(k) (XFASTINT (k) >> 8) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3624 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3625 /* Register hot-keys for reserved key combinations when Emacs has |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3626 keyboard focus, since this is the only way Emacs can receive key |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3627 combinations like Alt-Tab which are used by the system. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3628 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3629 static void |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3630 register_hot_keys (hwnd) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3631 HWND hwnd; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3632 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3633 Lisp_Object keylist; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3634 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3635 /* Use GC_CONSP, since we are called asynchronously. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3636 for (keylist = w32_grabbed_keys; GC_CONSP (keylist); keylist = XCDR (keylist)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3637 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3638 Lisp_Object key = XCAR (keylist); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3639 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3640 /* Deleted entries get set to nil. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3641 if (!INTEGERP (key)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3642 continue; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3643 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3644 RegisterHotKey (hwnd, HOTKEY_ID (key), |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3645 HOTKEY_MODIFIERS (key), HOTKEY_VK_CODE (key)); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3646 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3647 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3648 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3649 static void |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3650 unregister_hot_keys (hwnd) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3651 HWND hwnd; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3652 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3653 Lisp_Object keylist; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3654 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3655 /* Use GC_CONSP, since we are called asynchronously. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3656 for (keylist = w32_grabbed_keys; GC_CONSP (keylist); keylist = XCDR (keylist)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3657 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3658 Lisp_Object key = XCAR (keylist); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3659 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3660 if (!INTEGERP (key)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3661 continue; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3662 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3663 UnregisterHotKey (hwnd, HOTKEY_ID (key)); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3664 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3665 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3666 |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3667 /* Main message dispatch loop. */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3668 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3669 static void |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3670 w32_msg_pump (deferred_msg * msg_buf) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3671 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3672 MSG msg; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3673 int result; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3674 HWND focus_window; |
21874
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
3675 |
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
3676 msh_mousewheel = RegisterWindowMessage (MSH_MOUSEWHEEL); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3677 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3678 while (GetMessage (&msg, NULL, 0, 0)) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3679 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3680 if (msg.hwnd == NULL) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3681 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3682 switch (msg.message) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3683 { |
23950
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3684 case WM_NULL: |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3685 /* Produced by complete_deferred_msg; just ignore. */ |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3686 break; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3687 case WM_EMACS_CREATEWINDOW: |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3688 w32_createwindow ((struct frame *) msg.wParam); |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3689 if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, 0, 0)) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3690 abort (); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3691 break; |
21608
d191a8737145
(w32_msg_pump): Handle WM_EMACS_SETLOCALE.
Geoff Voelker <voelker@cs.washington.edu>
parents:
19707
diff
changeset
|
3692 case WM_EMACS_SETLOCALE: |
d191a8737145
(w32_msg_pump): Handle WM_EMACS_SETLOCALE.
Geoff Voelker <voelker@cs.washington.edu>
parents:
19707
diff
changeset
|
3693 SetThreadLocale (msg.wParam); |
d191a8737145
(w32_msg_pump): Handle WM_EMACS_SETLOCALE.
Geoff Voelker <voelker@cs.washington.edu>
parents:
19707
diff
changeset
|
3694 /* Reply is not expected. */ |
d191a8737145
(w32_msg_pump): Handle WM_EMACS_SETLOCALE.
Geoff Voelker <voelker@cs.washington.edu>
parents:
19707
diff
changeset
|
3695 break; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3696 case WM_EMACS_SETKEYBOARDLAYOUT: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3697 result = (int) ActivateKeyboardLayout ((HKL) msg.wParam, 0); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3698 if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3699 result, 0)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3700 abort (); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3701 break; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3702 case WM_EMACS_REGISTER_HOT_KEY: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3703 focus_window = GetFocus (); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3704 if (focus_window != NULL) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3705 RegisterHotKey (focus_window, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3706 HOTKEY_ID (msg.wParam), |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3707 HOTKEY_MODIFIERS (msg.wParam), |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3708 HOTKEY_VK_CODE (msg.wParam)); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3709 /* Reply is not expected. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3710 break; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3711 case WM_EMACS_UNREGISTER_HOT_KEY: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3712 focus_window = GetFocus (); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3713 if (focus_window != NULL) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3714 UnregisterHotKey (focus_window, HOTKEY_ID (msg.wParam)); |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3715 /* Mark item as erased. NB: this code must be |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3716 thread-safe. The next line is okay because the cons |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3717 cell is never made into garbage and is not relocated by |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3718 GC. */ |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3719 XCAR ((Lisp_Object) msg.lParam) = Qnil; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3720 if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, 0, 0)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3721 abort (); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
3722 break; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3723 case WM_EMACS_TOGGLE_LOCK_KEY: |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3724 { |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3725 int vk_code = (int) msg.wParam; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3726 int cur_state = (GetKeyState (vk_code) & 1); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3727 Lisp_Object new_state = (Lisp_Object) msg.lParam; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3728 |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3729 /* NB: This code must be thread-safe. It is safe to |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3730 call NILP because symbols are not relocated by GC, |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3731 and pointer here is not touched by GC (so the markbit |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3732 can't be set). Numbers are safe because they are |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3733 immediate values. */ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3734 if (NILP (new_state) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3735 || (NUMBERP (new_state) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3736 && (XUINT (new_state)) & 1 != cur_state)) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3737 { |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3738 one_w32_display_info.faked_key = vk_code; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3739 |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3740 keybd_event ((BYTE) vk_code, |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3741 (BYTE) MapVirtualKey (vk_code, 0), |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3742 KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3743 keybd_event ((BYTE) vk_code, |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3744 (BYTE) MapVirtualKey (vk_code, 0), |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3745 KEYEVENTF_EXTENDEDKEY | 0, 0); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3746 keybd_event ((BYTE) vk_code, |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3747 (BYTE) MapVirtualKey (vk_code, 0), |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3748 KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3749 cur_state = !cur_state; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3750 } |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3751 if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3752 cur_state, 0)) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3753 abort (); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3754 } |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
3755 break; |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3756 default: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3757 DebPrint (("msg %x not expected by w32_msg_pump\n", msg.message)); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3758 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3759 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3760 else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3761 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3762 DispatchMessage (&msg); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3763 } |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3764 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3765 /* Exit nested loop when our deferred message has completed. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3766 if (msg_buf->completed) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3767 break; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3768 } |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3769 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3770 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3771 deferred_msg * deferred_msg_head; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3772 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3773 static deferred_msg * |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3774 find_deferred_msg (HWND hwnd, UINT msg) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3775 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3776 deferred_msg * item; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3777 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3778 /* Don't actually need synchronization for read access, since |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3779 modification of single pointer is always atomic. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3780 /* enter_crit (); */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3781 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3782 for (item = deferred_msg_head; item != NULL; item = item->next) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3783 if (item->w32msg.msg.hwnd == hwnd |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3784 && item->w32msg.msg.message == msg) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3785 break; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3786 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3787 /* leave_crit (); */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3788 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3789 return item; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3790 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3791 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3792 static LRESULT |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3793 send_deferred_msg (deferred_msg * msg_buf, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3794 HWND hwnd, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3795 UINT msg, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3796 WPARAM wParam, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3797 LPARAM lParam) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3798 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3799 /* Only input thread can send deferred messages. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3800 if (GetCurrentThreadId () != dwWindowsThreadId) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3801 abort (); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3802 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3803 /* It is an error to send a message that is already deferred. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3804 if (find_deferred_msg (hwnd, msg) != NULL) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3805 abort (); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3806 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3807 /* Enforced synchronization is not needed because this is the only |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3808 function that alters deferred_msg_head, and the following critical |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3809 section is guaranteed to only be serially reentered (since only the |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3810 input thread can call us). */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3811 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3812 /* enter_crit (); */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3813 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3814 msg_buf->completed = 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3815 msg_buf->next = deferred_msg_head; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3816 deferred_msg_head = msg_buf; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3817 my_post_msg (&msg_buf->w32msg, hwnd, msg, wParam, lParam); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3818 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3819 /* leave_crit (); */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3820 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3821 /* Start a new nested message loop to process other messages until |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3822 this one is completed. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3823 w32_msg_pump (msg_buf); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3824 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3825 deferred_msg_head = msg_buf->next; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3826 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3827 return msg_buf->result; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3828 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3829 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3830 void |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3831 complete_deferred_msg (HWND hwnd, UINT msg, LRESULT result) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3832 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3833 deferred_msg * msg_buf = find_deferred_msg (hwnd, msg); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3834 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3835 if (msg_buf == NULL) |
23950
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3836 /* Message may have been cancelled, so don't abort(). */ |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3837 return; |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3838 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3839 msg_buf->result = result; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3840 msg_buf->completed = 1; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3841 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3842 /* Ensure input thread is woken so it notices the completion. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3843 PostThreadMessage (dwWindowsThreadId, WM_NULL, 0, 0); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3844 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3845 |
23950
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3846 void |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3847 cancel_all_deferred_msgs () |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3848 { |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3849 deferred_msg * item; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3850 |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3851 /* Don't actually need synchronization for read access, since |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3852 modification of single pointer is always atomic. */ |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3853 /* enter_crit (); */ |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3854 |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3855 for (item = deferred_msg_head; item != NULL; item = item->next) |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3856 { |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3857 item->result = 0; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3858 item->completed = 1; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3859 } |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3860 |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3861 /* leave_crit (); */ |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3862 |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3863 /* Ensure input thread is woken so it notices the completion. */ |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3864 PostThreadMessage (dwWindowsThreadId, WM_NULL, 0, 0); |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3865 } |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3866 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3867 DWORD |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3868 w32_msg_worker (dw) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3869 DWORD dw; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3870 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3871 MSG msg; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3872 deferred_msg dummy_buf; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3873 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3874 /* Ensure our message queue is created */ |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3875 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3876 PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3877 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3878 if (!PostThreadMessage (dwMainThreadId, WM_EMACS_DONE, 0, 0)) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3879 abort (); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3880 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3881 memset (&dummy_buf, 0, sizeof (dummy_buf)); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3882 dummy_buf.w32msg.msg.hwnd = NULL; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3883 dummy_buf.w32msg.msg.message = WM_NULL; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3884 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3885 /* This is the inital message loop which should only exit when the |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3886 application quits. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3887 w32_msg_pump (&dummy_buf); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3888 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
3889 return 0; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3890 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
3891 |
23950
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3892 static void |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3893 post_character_message (hwnd, msg, wParam, lParam, modifiers) |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3894 HWND hwnd; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3895 UINT msg; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3896 WPARAM wParam; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3897 LPARAM lParam; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3898 DWORD modifiers; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3899 |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3900 { |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3901 W32Msg wmsg; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3902 |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3903 wmsg.dwModifiers = modifiers; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3904 |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3905 /* Detect quit_char and set quit-flag directly. Note that we |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3906 still need to post a message to ensure the main thread will be |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3907 woken up if blocked in sys_select(), but we do NOT want to post |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3908 the quit_char message itself (because it will usually be as if |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3909 the user had typed quit_char twice). Instead, we post a dummy |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3910 message that has no particular effect. */ |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3911 { |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3912 int c = wParam; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3913 if (isalpha (c) && wmsg.dwModifiers == ctrl_modifier) |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3914 c = make_ctrl_char (c) & 0377; |
24339
e8b73c2ac4ec
(Vw32_quit_key): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24252
diff
changeset
|
3915 if (c == quit_char |
e8b73c2ac4ec
(Vw32_quit_key): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24252
diff
changeset
|
3916 || (wmsg.dwModifiers == 0 && |
e8b73c2ac4ec
(Vw32_quit_key): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24252
diff
changeset
|
3917 XFASTINT (Vw32_quit_key) && wParam == XFASTINT (Vw32_quit_key))) |
23950
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3918 { |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3919 Vquit_flag = Qt; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3920 |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3921 /* The choice of message is somewhat arbitrary, as long as |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3922 the main thread handler just ignores it. */ |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3923 msg = WM_NULL; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3924 |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3925 /* Interrupt any blocking system calls. */ |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3926 signal_quit (); |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3927 |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3928 /* As a safety precaution, forcibly complete any deferred |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3929 messages. This is a kludge, but I don't see any particularly |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3930 clean way to handle the situation where a deferred message is |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3931 "dropped" in the lisp thread, and will thus never be |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3932 completed, eg. by the user trying to activate the menubar |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3933 when the lisp thread is busy, and then typing C-g when the |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3934 menubar doesn't open promptly (with the result that the |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3935 menubar never responds at all because the deferred |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3936 WM_INITMENU message is never completed). Another problem |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3937 situation is when the lisp thread calls SendMessage (to send |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3938 a window manager command) when a message has been deferred; |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3939 the lisp thread gets blocked indefinitely waiting for the |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3940 deferred message to be completed, which itself is waiting for |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3941 the lisp thread to respond. |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3942 |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3943 Note that we don't want to block the input thread waiting for |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3944 a reponse from the lisp thread (although that would at least |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3945 solve the deadlock problem above), because we want to be able |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3946 to receive C-g to interrupt the lisp thread. */ |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3947 cancel_all_deferred_msgs (); |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3948 } |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3949 } |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3950 |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3951 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3952 } |
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
3953 |
13434 | 3954 /* Main window procedure */ |
3955 | |
3956 LRESULT CALLBACK | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3957 w32_wnd_proc (hwnd, msg, wParam, lParam) |
13434 | 3958 HWND hwnd; |
3959 UINT msg; | |
3960 WPARAM wParam; | |
3961 LPARAM lParam; | |
3962 { | |
3963 struct frame *f; | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3964 struct w32_display_info *dpyinfo = &one_w32_display_info; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3965 W32Msg wmsg; |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
3966 int windows_translate; |
24206
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
3967 int key; |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
3968 |
15650
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3969 /* Note that it is okay to call x_window_to_frame, even though we are |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3970 not running in the main lisp thread, because frame deletion |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3971 requires the lisp thread to synchronize with this thread. Thus, if |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3972 a frame struct is returned, it can be used without concern that the |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3973 lisp thread might make it disappear while we are using it. |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3974 |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3975 NB. Walking the frame list in this thread is safe (as long as |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3976 writes of Lisp_Object slots are atomic, which they are on Windows). |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3977 Although delete-frame can destructively modify the frame list while |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3978 we are walking it, a garbage collection cannot occur until after |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3979 delete-frame has synchronized with this thread. |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3980 |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3981 It is also safe to use functions that make GDI calls, such as |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
3982 w32_clear_rect, because these functions must obtain a DC handle |
15650
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3983 from the frame struct using get_frame_dc which is thread-aware. */ |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3984 |
13434 | 3985 switch (msg) |
3986 { | |
3987 case WM_ERASEBKGND: | |
15650
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3988 f = x_window_to_frame (dpyinfo, hwnd); |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3989 if (f) |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3990 { |
27407
7df920562cbe
(w32_defined_color): Apply gamma correction before trying to map to
Jason Rumney <jasonr@gnu.org>
parents:
27397
diff
changeset
|
3991 HDC hdc = get_frame_dc (f); |
15650
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
3992 GetUpdateRect (hwnd, &wmsg.rect, FALSE); |
27407
7df920562cbe
(w32_defined_color): Apply gamma correction before trying to map to
Jason Rumney <jasonr@gnu.org>
parents:
27397
diff
changeset
|
3993 w32_clear_rect (f, hdc, &wmsg.rect); |
7df920562cbe
(w32_defined_color): Apply gamma correction before trying to map to
Jason Rumney <jasonr@gnu.org>
parents:
27397
diff
changeset
|
3994 release_frame_dc (f, hdc); |
24718
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
3995 |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
3996 #if defined (W32_DEBUG_DISPLAY) |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
3997 DebPrint (("WM_ERASEBKGND: erasing %d,%d-%d,%d\n", |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
3998 wmsg.rect.left, wmsg.rect.top, wmsg.rect.right, |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
3999 wmsg.rect.bottom)); |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4000 #endif /* W32_DEBUG_DISPLAY */ |
15650
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
4001 } |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4002 return 1; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4003 case WM_PALETTECHANGED: |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4004 /* ignore our own changes */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4005 if ((HWND)wParam != hwnd) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4006 { |
15650
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
4007 f = x_window_to_frame (dpyinfo, hwnd); |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
4008 if (f) |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
4009 /* get_frame_dc will realize our palette and force all |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
4010 frames to be redrawn if needed. */ |
bc9525478463
(win32_wnd_proc): Handle WM_ERASEBKGND and
Karl Heuer <kwzh@gnu.org>
parents:
15459
diff
changeset
|
4011 release_frame_dc (f, get_frame_dc (f)); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4012 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4013 return 0; |
13434 | 4014 case WM_PAINT: |
24718
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4015 { |
24670 | 4016 PAINTSTRUCT paintStruct; |
4017 RECT update_rect; | |
4018 | |
4019 /* MSDN Docs say not to call BeginPaint if GetUpdateRect | |
4020 fails. Apparently this can happen under some | |
4021 circumstances. */ | |
24695
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4022 if (!w32_strict_painting || GetUpdateRect (hwnd, &update_rect, FALSE)) |
24670 | 4023 { |
4024 enter_crit (); | |
4025 BeginPaint (hwnd, &paintStruct); | |
4026 | |
24695
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4027 if (w32_strict_painting) |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4028 /* The rectangles returned by GetUpdateRect and BeginPaint |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4029 do not always match. GetUpdateRect seems to be the |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4030 more reliable of the two. */ |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4031 wmsg.rect = update_rect; |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4032 else |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4033 wmsg.rect = paintStruct.rcPaint; |
24670 | 4034 |
4035 #if defined (W32_DEBUG_DISPLAY) | |
4036 DebPrint (("WM_PAINT: painting %d,%d-%d,%d\n", wmsg.rect.left, | |
4037 wmsg.rect.top, wmsg.rect.right, wmsg.rect.bottom)); | |
4038 DebPrint (("WM_PAINT: update region is %d,%d-%d,%d\n", | |
4039 update_rect.left, update_rect.top, | |
4040 update_rect.right, update_rect.bottom)); | |
4041 #endif | |
4042 EndPaint (hwnd, &paintStruct); | |
4043 leave_crit (); | |
4044 | |
4045 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); | |
4046 | |
4047 return 0; | |
4048 } | |
24695
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4049 |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4050 /* If GetUpdateRect returns 0 (meaning there is no update |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4051 region), assume the whole window needs to be repainted. */ |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4052 GetClientRect(hwnd, &wmsg.rect); |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4053 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
4054 return 0; |
13434 | 4055 } |
14461
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
4056 |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4057 case WM_INPUTLANGCHANGE: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4058 /* Inform lisp thread of keyboard layout changes. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4059 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4060 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4061 /* Clear dead keys in the keyboard state; for simplicity only |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4062 preserve modifier key states. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4063 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4064 int i; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4065 BYTE keystate[256]; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4066 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4067 GetKeyboardState (keystate); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4068 for (i = 0; i < 256; i++) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4069 if (1 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4070 && i != VK_SHIFT |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4071 && i != VK_LSHIFT |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4072 && i != VK_RSHIFT |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4073 && i != VK_CAPITAL |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4074 && i != VK_NUMLOCK |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4075 && i != VK_SCROLL |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4076 && i != VK_CONTROL |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4077 && i != VK_LCONTROL |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4078 && i != VK_RCONTROL |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4079 && i != VK_MENU |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4080 && i != VK_LMENU |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4081 && i != VK_RMENU |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4082 && i != VK_LWIN |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4083 && i != VK_RWIN) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4084 keystate[i] = 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4085 SetKeyboardState (keystate); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4086 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4087 goto dflt; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4088 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4089 case WM_HOTKEY: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4090 /* Synchronize hot keys with normal input. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4091 PostMessage (hwnd, WM_KEYDOWN, HIWORD (lParam), 0); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4092 return (0); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4093 |
14461
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
4094 case WM_KEYUP: |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
4095 case WM_SYSKEYUP: |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
4096 record_keyup (wParam, lParam); |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
4097 goto dflt; |
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
4098 |
13434 | 4099 case WM_KEYDOWN: |
4100 case WM_SYSKEYDOWN: | |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4101 /* Ignore keystrokes we fake ourself; see below. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4102 if (dpyinfo->faked_key == wParam) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4103 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4104 dpyinfo->faked_key = 0; |
24206
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4105 /* Make sure TranslateMessage sees them though (as long as |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4106 they don't produce WM_CHAR messages). This ensures that |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4107 indicator lights are toggled promptly on Windows 9x, for |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4108 example. */ |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4109 if (lispy_function_keys[wParam] != 0) |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4110 { |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4111 windows_translate = 1; |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4112 goto translate; |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4113 } |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4114 return 0; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4115 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4116 |
15377
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
4117 /* Synchronize modifiers with current keystroke. */ |
65d9ff2c8602
(sync_modifiers): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15314
diff
changeset
|
4118 sync_modifiers (); |
14461
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
4119 record_keydown (wParam, lParam); |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4120 wParam = map_keypad_keys (wParam, (lParam & 0x1000000L) != 0); |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4121 |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4122 windows_translate = 0; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4123 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4124 switch (wParam) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4125 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4126 case VK_LWIN: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4127 if (NILP (Vw32_pass_lwindow_to_system)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4128 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4129 /* Prevent system from acting on keyup (which opens the |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4130 Start menu if no other key was pressed) by simulating a |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4131 press of Space which we will ignore. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4132 if (GetAsyncKeyState (wParam) & 1) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4133 { |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4134 if (NUMBERP (Vw32_phantom_key_code)) |
24206
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4135 key = XUINT (Vw32_phantom_key_code) & 255; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4136 else |
24206
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4137 key = VK_SPACE; |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4138 dpyinfo->faked_key = key; |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4139 keybd_event (key, (BYTE) MapVirtualKey (key, 0), 0, 0); |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4140 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4141 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4142 if (!NILP (Vw32_lwindow_modifier)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4143 return 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4144 break; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4145 case VK_RWIN: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4146 if (NILP (Vw32_pass_rwindow_to_system)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4147 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4148 if (GetAsyncKeyState (wParam) & 1) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4149 { |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4150 if (NUMBERP (Vw32_phantom_key_code)) |
24206
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4151 key = XUINT (Vw32_phantom_key_code) & 255; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4152 else |
24206
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4153 key = VK_SPACE; |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4154 dpyinfo->faked_key = key; |
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4155 keybd_event (key, (BYTE) MapVirtualKey (key, 0), 0, 0); |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4156 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4157 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4158 if (!NILP (Vw32_rwindow_modifier)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4159 return 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4160 break; |
24206
d3649b38bb37
(w32_wnd_proc): Fix bug introduced by previous change;
Andrew Innes <andrewi@gnu.org>
parents:
24147
diff
changeset
|
4161 case VK_APPS: |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4162 if (!NILP (Vw32_apps_modifier)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4163 return 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4164 break; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4165 case VK_MENU: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4166 if (NILP (Vw32_pass_alt_to_system)) |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4167 /* Prevent DefWindowProc from activating the menu bar if an |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4168 Alt key is pressed and released by itself. */ |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4169 return 0; |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4170 windows_translate = 1; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4171 break; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4172 case VK_CAPITAL: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4173 /* Decide whether to treat as modifier or function key. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4174 if (NILP (Vw32_enable_caps_lock)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4175 goto disable_lock_key; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4176 windows_translate = 1; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4177 break; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4178 case VK_NUMLOCK: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4179 /* Decide whether to treat as modifier or function key. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4180 if (NILP (Vw32_enable_num_lock)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4181 goto disable_lock_key; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4182 windows_translate = 1; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4183 break; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4184 case VK_SCROLL: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4185 /* Decide whether to treat as modifier or function key. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4186 if (NILP (Vw32_scroll_lock_modifier)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4187 goto disable_lock_key; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4188 windows_translate = 1; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4189 break; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4190 disable_lock_key: |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4191 /* Ensure the appropriate lock key state (and indicator light) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4192 remains in the same state. We do this by faking another |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4193 press of the relevant key. Apparently, this really is the |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4194 only way to toggle the state of the indicator lights. */ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4195 dpyinfo->faked_key = wParam; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4196 keybd_event ((BYTE) wParam, (BYTE) MapVirtualKey (wParam, 0), |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4197 KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4198 keybd_event ((BYTE) wParam, (BYTE) MapVirtualKey (wParam, 0), |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4199 KEYEVENTF_EXTENDEDKEY | 0, 0); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4200 keybd_event ((BYTE) wParam, (BYTE) MapVirtualKey (wParam, 0), |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4201 KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4202 /* Ensure indicator lights are updated promptly on Windows 9x |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4203 (TranslateMessage apparently does this), after forwarding |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4204 input event. */ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4205 post_character_message (hwnd, msg, wParam, lParam, |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4206 w32_get_key_modifiers (wParam, lParam)); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4207 windows_translate = 1; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4208 break; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4209 case VK_CONTROL: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4210 case VK_SHIFT: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4211 case VK_PROCESSKEY: /* Generated by IME. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4212 windows_translate = 1; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4213 break; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4214 case VK_CANCEL: |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4215 /* Windows maps Ctrl-Pause (aka Ctrl-Break) into VK_CANCEL, |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4216 which is confusing for purposes of key binding; convert |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4217 VK_CANCEL events into VK_PAUSE events. */ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4218 wParam = VK_PAUSE; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4219 break; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4220 case VK_PAUSE: |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4221 /* Windows maps Ctrl-NumLock into VK_PAUSE, which is confusing |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4222 for purposes of key binding; convert these back into |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4223 VK_NUMLOCK events, at least when we want to see NumLock key |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4224 presses. (Note that there is never any possibility that |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4225 VK_PAUSE with Ctrl really is C-Pause as per above.) */ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4226 if (NILP (Vw32_enable_num_lock) && modifier_set (VK_CONTROL)) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4227 wParam = VK_NUMLOCK; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4228 break; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4229 default: |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4230 /* If not defined as a function key, change it to a WM_CHAR message. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4231 if (lispy_function_keys[wParam] == 0) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4232 { |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4233 DWORD modifiers = construct_console_modifiers (); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4234 |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4235 if (!NILP (Vw32_recognize_altgr) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4236 && modifier_set (VK_LCONTROL) && modifier_set (VK_RMENU)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4237 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4238 /* Always let TranslateMessage handle AltGr key chords; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4239 for some reason, ToAscii doesn't always process AltGr |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4240 chords correctly. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4241 windows_translate = 1; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4242 } |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4243 else if ((modifiers & (~SHIFT_PRESSED & ~CAPSLOCK_ON)) != 0) |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4244 { |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4245 /* Handle key chords including any modifiers other |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4246 than shift directly, in order to preserve as much |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4247 modifier information as possible. */ |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4248 if ('A' <= wParam && wParam <= 'Z') |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4249 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4250 /* Don't translate modified alphabetic keystrokes, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4251 so the user doesn't need to constantly switch |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4252 layout to type control or meta keystrokes when |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4253 the normal layout translates alphabetic |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4254 characters to non-ascii characters. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4255 if (!modifier_set (VK_SHIFT)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4256 wParam += ('a' - 'A'); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4257 msg = WM_CHAR; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4258 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4259 else |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4260 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4261 /* Try to handle other keystrokes by determining the |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4262 base character (ie. translating the base key plus |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4263 shift modifier). */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4264 int add; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4265 int isdead = 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4266 KEY_EVENT_RECORD key; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4267 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4268 key.bKeyDown = TRUE; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4269 key.wRepeatCount = 1; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4270 key.wVirtualKeyCode = wParam; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4271 key.wVirtualScanCode = (lParam & 0xFF0000) >> 16; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4272 key.uChar.AsciiChar = 0; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4273 key.dwControlKeyState = modifiers; |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4274 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4275 add = w32_kbd_patch_key (&key); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4276 /* 0 means an unrecognised keycode, negative means |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4277 dead key. Ignore both. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4278 while (--add >= 0) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4279 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4280 /* Forward asciified character sequence. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4281 post_character_message |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4282 (hwnd, WM_CHAR, key.uChar.AsciiChar, lParam, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4283 w32_get_key_modifiers (wParam, lParam)); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4284 w32_kbd_patch_key (&key); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4285 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4286 return 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4287 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4288 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4289 else |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4290 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4291 /* Let TranslateMessage handle everything else. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4292 windows_translate = 1; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4293 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4294 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4295 } |
14461
4fe9540be594
(modifiers, modifier_key_support_tested,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14353
diff
changeset
|
4296 |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4297 translate: |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4298 if (windows_translate) |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4299 { |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16602
diff
changeset
|
4300 MSG windows_msg = { hwnd, msg, wParam, lParam, 0, {0,0} }; |
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16602
diff
changeset
|
4301 |
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16602
diff
changeset
|
4302 windows_msg.time = GetMessageTime (); |
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16602
diff
changeset
|
4303 TranslateMessage (&windows_msg); |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4304 goto dflt; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4305 } |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4306 |
13434 | 4307 /* Fall through */ |
4308 | |
4309 case WM_SYSCHAR: | |
4310 case WM_CHAR: | |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4311 post_character_message (hwnd, msg, wParam, lParam, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4312 w32_get_key_modifiers (wParam, lParam)); |
13434 | 4313 break; |
14810
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
4314 |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4315 /* Simulate middle mouse button events when left and right buttons |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4316 are used together, but only if user has two button mouse. */ |
13434 | 4317 case WM_LBUTTONDOWN: |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4318 case WM_RBUTTONDOWN: |
27894
6c4ff3519d09
(w32_wnd_proc) [WM_LBUTTON_DOWN, WM_RBUTTON_DOWN, WM_LBUTTON_UP,
Jason Rumney <jasonr@gnu.org>
parents:
27516
diff
changeset
|
4319 if (XINT (Vw32_num_mouse_buttons) > 2) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4320 goto handle_plain_button; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4321 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4322 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4323 int this = (msg == WM_LBUTTONDOWN) ? LMOUSE : RMOUSE; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4324 int other = (msg == WM_LBUTTONDOWN) ? RMOUSE : LMOUSE; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4325 |
15205
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
4326 if (button_state & this) |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
4327 return 0; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4328 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4329 if (button_state == 0) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4330 SetCapture (hwnd); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4331 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4332 button_state |= this; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4333 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4334 if (button_state & other) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4335 { |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4336 if (mouse_button_timer) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4337 { |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4338 KillTimer (hwnd, mouse_button_timer); |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4339 mouse_button_timer = 0; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4340 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4341 /* Generate middle mouse event instead. */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4342 msg = WM_MBUTTONDOWN; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4343 button_state |= MMOUSE; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4344 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4345 else if (button_state & MMOUSE) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4346 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4347 /* Ignore button event if we've already generated a |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4348 middle mouse down event. This happens if the |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4349 user releases and press one of the two buttons |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4350 after we've faked a middle mouse event. */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4351 return 0; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4352 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4353 else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4354 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4355 /* Flush out saved message. */ |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4356 post_msg (&saved_mouse_button_msg); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4357 } |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
4358 wmsg.dwModifiers = w32_get_modifiers (); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4359 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4360 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4361 /* Clear message buffer. */ |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4362 saved_mouse_button_msg.msg.hwnd = 0; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4363 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4364 else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4365 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4366 /* Hold onto message for now. */ |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4367 mouse_button_timer = |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4368 SetTimer (hwnd, MOUSE_BUTTON_ID, |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4369 XINT (Vw32_mouse_button_tolerance), NULL); |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4370 saved_mouse_button_msg.msg.hwnd = hwnd; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4371 saved_mouse_button_msg.msg.message = msg; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4372 saved_mouse_button_msg.msg.wParam = wParam; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4373 saved_mouse_button_msg.msg.lParam = lParam; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4374 saved_mouse_button_msg.msg.time = GetMessageTime (); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
4375 saved_mouse_button_msg.dwModifiers = w32_get_modifiers (); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4376 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4377 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4378 return 0; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4379 |
13434 | 4380 case WM_LBUTTONUP: |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4381 case WM_RBUTTONUP: |
27894
6c4ff3519d09
(w32_wnd_proc) [WM_LBUTTON_DOWN, WM_RBUTTON_DOWN, WM_LBUTTON_UP,
Jason Rumney <jasonr@gnu.org>
parents:
27516
diff
changeset
|
4382 if (XINT (Vw32_num_mouse_buttons) > 2) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4383 goto handle_plain_button; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4384 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4385 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4386 int this = (msg == WM_LBUTTONUP) ? LMOUSE : RMOUSE; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4387 int other = (msg == WM_LBUTTONUP) ? RMOUSE : LMOUSE; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4388 |
15205
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
4389 if ((button_state & this) == 0) |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
4390 return 0; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4391 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4392 button_state &= ~this; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4393 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4394 if (button_state & MMOUSE) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4395 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4396 /* Only generate event when second button is released. */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4397 if ((button_state & other) == 0) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4398 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4399 msg = WM_MBUTTONUP; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4400 button_state &= ~MMOUSE; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4401 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4402 if (button_state) abort (); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4403 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4404 else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4405 return 0; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4406 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4407 else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4408 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4409 /* Flush out saved message if necessary. */ |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4410 if (saved_mouse_button_msg.msg.hwnd) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4411 { |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4412 post_msg (&saved_mouse_button_msg); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4413 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4414 } |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
4415 wmsg.dwModifiers = w32_get_modifiers (); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4416 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4417 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4418 /* Always clear message buffer and cancel timer. */ |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4419 saved_mouse_button_msg.msg.hwnd = 0; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4420 KillTimer (hwnd, mouse_button_timer); |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4421 mouse_button_timer = 0; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4422 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4423 if (button_state == 0) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4424 ReleaseCapture (); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4425 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4426 return 0; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4427 |
13434 | 4428 case WM_MBUTTONDOWN: |
4429 case WM_MBUTTONUP: | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4430 handle_plain_button: |
13434 | 4431 { |
4432 BOOL up; | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4433 int button; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4434 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4435 if (parse_button (msg, &button, &up)) |
13434 | 4436 { |
4437 if (up) ReleaseCapture (); | |
4438 else SetCapture (hwnd); | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4439 button = (button == 0) ? LMOUSE : |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4440 ((button == 1) ? MMOUSE : RMOUSE); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4441 if (up) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4442 button_state &= ~button; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4443 else |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4444 button_state |= button; |
13434 | 4445 } |
4446 } | |
4447 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
4448 wmsg.dwModifiers = w32_get_modifiers (); |
13434 | 4449 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4450 return 0; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4451 |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4452 case WM_VSCROLL: |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4453 case WM_MOUSEMOVE: |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
4454 if (XINT (Vw32_mouse_move_interval) <= 0 |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4455 || (msg == WM_MOUSEMOVE && button_state == 0)) |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4456 { |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
4457 wmsg.dwModifiers = w32_get_modifiers (); |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4458 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4459 return 0; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4460 } |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4461 |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4462 /* Hang onto mouse move and scroll messages for a bit, to avoid |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4463 sending such events to Emacs faster than it can process them. |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4464 If we get more events before the timer from the first message |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4465 expires, we just replace the first message. */ |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4466 |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4467 if (saved_mouse_move_msg.msg.hwnd == 0) |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4468 mouse_move_timer = |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4469 SetTimer (hwnd, MOUSE_MOVE_ID, |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4470 XINT (Vw32_mouse_move_interval), NULL); |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4471 |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4472 /* Hold onto message for now. */ |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4473 saved_mouse_move_msg.msg.hwnd = hwnd; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4474 saved_mouse_move_msg.msg.message = msg; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4475 saved_mouse_move_msg.msg.wParam = wParam; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4476 saved_mouse_move_msg.msg.lParam = lParam; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4477 saved_mouse_move_msg.msg.time = GetMessageTime (); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
4478 saved_mouse_move_msg.dwModifiers = w32_get_modifiers (); |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4479 |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4480 return 0; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4481 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4482 case WM_MOUSEWHEEL: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4483 wmsg.dwModifiers = w32_get_modifiers (); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4484 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4485 return 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4486 |
21884 | 4487 case WM_DROPFILES: |
4488 wmsg.dwModifiers = w32_get_modifiers (); | |
4489 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); | |
4490 return 0; | |
4491 | |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4492 case WM_TIMER: |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4493 /* Flush out saved messages if necessary. */ |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4494 if (wParam == mouse_button_timer) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4495 { |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4496 if (saved_mouse_button_msg.msg.hwnd) |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4497 { |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4498 post_msg (&saved_mouse_button_msg); |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4499 saved_mouse_button_msg.msg.hwnd = 0; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4500 } |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4501 KillTimer (hwnd, mouse_button_timer); |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4502 mouse_button_timer = 0; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4503 } |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4504 else if (wParam == mouse_move_timer) |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4505 { |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4506 if (saved_mouse_move_msg.msg.hwnd) |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4507 { |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4508 post_msg (&saved_mouse_move_msg); |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4509 saved_mouse_move_msg.msg.hwnd = 0; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4510 } |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4511 KillTimer (hwnd, mouse_move_timer); |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4512 mouse_move_timer = 0; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4513 } |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4514 return 0; |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4515 |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4516 case WM_NCACTIVATE: |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4517 /* Windows doesn't send us focus messages when putting up and |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16602
diff
changeset
|
4518 taking down a system popup dialog as for Ctrl-Alt-Del on Windows 95. |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4519 The only indication we get that something happened is receiving |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4520 this message afterwards. So this is a good time to reset our |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4521 keyboard modifiers' state. */ |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4522 reset_modifiers (); |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4523 goto dflt; |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
4524 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4525 case WM_INITMENU: |
24751
e0eaca5025bc
(w32_wnd_proc): Ensure mouse capture is released if
Andrew Innes <andrewi@gnu.org>
parents:
24718
diff
changeset
|
4526 button_state = 0; |
e0eaca5025bc
(w32_wnd_proc): Ensure mouse capture is released if
Andrew Innes <andrewi@gnu.org>
parents:
24718
diff
changeset
|
4527 ReleaseCapture (); |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4528 /* We must ensure menu bar is fully constructed and up to date |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4529 before allowing user interaction with it. To achieve this |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4530 we send this message to the lisp thread and wait for a |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4531 reply (whose value is not actually needed) to indicate that |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4532 the menu bar is now ready for use, so we can now return. |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4533 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4534 To remain responsive in the meantime, we enter a nested message |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4535 loop that can process all other messages. |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4536 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4537 However, we skip all this if the message results from calling |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4538 TrackPopupMenu - in fact, we must NOT attempt to send the lisp |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4539 thread a message because it is blocked on us at this point. We |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4540 set menubar_active before calling TrackPopupMenu to indicate |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4541 this (there is no possibility of confusion with real menubar |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4542 being active). */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4543 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4544 f = x_window_to_frame (dpyinfo, hwnd); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4545 if (f |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4546 && (f->output_data.w32->menubar_active |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4547 /* We can receive this message even in the absence of a |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4548 menubar (ie. when the system menu is activated) - in this |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4549 case we do NOT want to forward the message, otherwise it |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4550 will cause the menubar to suddenly appear when the user |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4551 had requested it to be turned off! */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4552 || f->output_data.w32->menubar_widget == NULL)) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4553 return 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4554 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4555 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4556 deferred_msg msg_buf; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4557 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4558 /* Detect if message has already been deferred; in this case |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4559 we cannot return any sensible value to ignore this. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4560 if (find_deferred_msg (hwnd, msg) != NULL) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4561 abort (); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4562 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4563 return send_deferred_msg (&msg_buf, hwnd, msg, wParam, lParam); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4564 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4565 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4566 case WM_EXITMENULOOP: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4567 f = x_window_to_frame (dpyinfo, hwnd); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4568 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4569 /* Indicate that menubar can be modified again. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4570 if (f) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4571 f->output_data.w32->menubar_active = 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4572 goto dflt; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4573 |
28272
f62bb21d38db
(w32_wnd_proc): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27936
diff
changeset
|
4574 case WM_MENUSELECT: |
f62bb21d38db
(w32_wnd_proc): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27936
diff
changeset
|
4575 wmsg.dwModifiers = w32_get_modifiers (); |
f62bb21d38db
(w32_wnd_proc): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27936
diff
changeset
|
4576 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
f62bb21d38db
(w32_wnd_proc): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27936
diff
changeset
|
4577 return 0; |
f62bb21d38db
(w32_wnd_proc): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27936
diff
changeset
|
4578 |
21735
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4579 case WM_MEASUREITEM: |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4580 f = x_window_to_frame (dpyinfo, hwnd); |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4581 if (f) |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4582 { |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4583 MEASUREITEMSTRUCT * pMis = (MEASUREITEMSTRUCT *) lParam; |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4584 |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4585 if (pMis->CtlType == ODT_MENU) |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4586 { |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4587 /* Work out dimensions for popup menu titles. */ |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4588 char * title = (char *) pMis->itemData; |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4589 HDC hdc = GetDC (hwnd); |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4590 HFONT menu_font = GetCurrentObject (hdc, OBJ_FONT); |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4591 LOGFONT menu_logfont; |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4592 HFONT old_font; |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4593 SIZE size; |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4594 |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4595 GetObject (menu_font, sizeof (menu_logfont), &menu_logfont); |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4596 menu_logfont.lfWeight = FW_BOLD; |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4597 menu_font = CreateFontIndirect (&menu_logfont); |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4598 old_font = SelectObject (hdc, menu_font); |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4599 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
4600 pMis->itemHeight = GetSystemMetrics (SM_CYMENUSIZE); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
4601 if (title) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
4602 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
4603 GetTextExtentPoint32 (hdc, title, strlen (title), &size); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
4604 pMis->itemWidth = size.cx; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
4605 if (pMis->itemHeight < size.cy) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
4606 pMis->itemHeight = size.cy; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
4607 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
4608 else |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
4609 pMis->itemWidth = 0; |
21735
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4610 |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4611 SelectObject (hdc, old_font); |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4612 DeleteObject (menu_font); |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4613 ReleaseDC (hwnd, hdc); |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4614 return TRUE; |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4615 } |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4616 } |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4617 return 0; |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4618 |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4619 case WM_DRAWITEM: |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4620 f = x_window_to_frame (dpyinfo, hwnd); |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4621 if (f) |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4622 { |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4623 DRAWITEMSTRUCT * pDis = (DRAWITEMSTRUCT *) lParam; |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4624 |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4625 if (pDis->CtlType == ODT_MENU) |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4626 { |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4627 /* Draw popup menu title. */ |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4628 char * title = (char *) pDis->itemData; |
30239
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4629 if (title) |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4630 { |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4631 HDC hdc = pDis->hDC; |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4632 HFONT menu_font = GetCurrentObject (hdc, OBJ_FONT); |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4633 LOGFONT menu_logfont; |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4634 HFONT old_font; |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4635 |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4636 GetObject (menu_font, sizeof (menu_logfont), &menu_logfont); |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4637 menu_logfont.lfWeight = FW_BOLD; |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4638 menu_font = CreateFontIndirect (&menu_logfont); |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4639 old_font = SelectObject (hdc, menu_font); |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4640 |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4641 /* Always draw title as if not selected. */ |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4642 ExtTextOut (hdc, |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4643 pDis->rcItem.left |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4644 + GetSystemMetrics (SM_CXMENUCHECK), |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4645 pDis->rcItem.top, |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4646 ETO_OPAQUE, &pDis->rcItem, |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4647 title, strlen (title), NULL); |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4648 |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4649 SelectObject (hdc, old_font); |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4650 DeleteObject (menu_font); |
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
4651 } |
21735
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4652 return TRUE; |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4653 } |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4654 } |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4655 return 0; |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4656 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4657 #if 0 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4658 /* Still not right - can't distinguish between clicks in the |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4659 client area of the frame from clicks forwarded from the scroll |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4660 bars - may have to hook WM_NCHITTEST to remember the mouse |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4661 position and then check if it is in the client area ourselves. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4662 case WM_MOUSEACTIVATE: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4663 /* Discard the mouse click that activates a frame, allowing the |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4664 user to click anywhere without changing point (or worse!). |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4665 Don't eat mouse clicks on scrollbars though!! */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4666 if (LOWORD (lParam) == HTCLIENT ) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4667 return MA_ACTIVATEANDEAT; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4668 goto dflt; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4669 #endif |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4670 |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4671 case WM_ACTIVATEAPP: |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4672 case WM_ACTIVATE: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4673 case WM_WINDOWPOSCHANGED: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4674 case WM_SHOWWINDOW: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4675 /* Inform lisp thread that a frame might have just been obscured |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4676 or exposed, so should recheck visibility of all frames. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4677 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4678 goto dflt; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4679 |
14810
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
4680 case WM_SETFOCUS: |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4681 dpyinfo->faked_key = 0; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
4682 reset_modifiers (); |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4683 register_hot_keys (hwnd); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4684 goto command; |
15314
796d825f4444
(reset_modifiers): Only clear a modifier if the modifier key has been
Richard M. Stallman <rms@gnu.org>
parents:
15290
diff
changeset
|
4685 case WM_KILLFOCUS: |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4686 unregister_hot_keys (hwnd); |
24751
e0eaca5025bc
(w32_wnd_proc): Ensure mouse capture is released if
Andrew Innes <andrewi@gnu.org>
parents:
24718
diff
changeset
|
4687 button_state = 0; |
e0eaca5025bc
(w32_wnd_proc): Ensure mouse capture is released if
Andrew Innes <andrewi@gnu.org>
parents:
24718
diff
changeset
|
4688 ReleaseCapture (); |
13434 | 4689 case WM_MOVE: |
4690 case WM_SIZE: | |
4691 case WM_COMMAND: | |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
4692 command: |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
4693 wmsg.dwModifiers = w32_get_modifiers (); |
13434 | 4694 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
4695 goto dflt; | |
15034
fb947ec168a8
(defined_color): Map color to nearest in default palette.
Richard M. Stallman <rms@gnu.org>
parents:
14983
diff
changeset
|
4696 |
fb947ec168a8
(defined_color): Map color to nearest in default palette.
Richard M. Stallman <rms@gnu.org>
parents:
14983
diff
changeset
|
4697 case WM_CLOSE: |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
4698 wmsg.dwModifiers = w32_get_modifiers (); |
15034
fb947ec168a8
(defined_color): Map color to nearest in default palette.
Richard M. Stallman <rms@gnu.org>
parents:
14983
diff
changeset
|
4699 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
fb947ec168a8
(defined_color): Map color to nearest in default palette.
Richard M. Stallman <rms@gnu.org>
parents:
14983
diff
changeset
|
4700 return 0; |
fb947ec168a8
(defined_color): Map color to nearest in default palette.
Richard M. Stallman <rms@gnu.org>
parents:
14983
diff
changeset
|
4701 |
13434 | 4702 case WM_WINDOWPOSCHANGING: |
4703 { | |
4704 WINDOWPLACEMENT wp; | |
4705 LPWINDOWPOS lppos = (WINDOWPOS *) lParam; | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4706 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4707 wp.length = sizeof (WINDOWPLACEMENT); |
13434 | 4708 GetWindowPlacement (hwnd, &wp); |
4709 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4710 if (wp.showCmd != SW_SHOWMINIMIZED && (lppos->flags & SWP_NOSIZE) == 0) |
13434 | 4711 { |
4712 RECT rect; | |
4713 int wdiff; | |
4714 int hdiff; | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4715 DWORD font_width; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4716 DWORD line_height; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4717 DWORD internal_border; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4718 DWORD scrollbar_extra; |
13434 | 4719 RECT wr; |
4720 | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4721 wp.length = sizeof(wp); |
13434 | 4722 GetWindowRect (hwnd, &wr); |
4723 | |
14353 | 4724 enter_crit (); |
13434 | 4725 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4726 font_width = GetWindowLong (hwnd, WND_FONTWIDTH_INDEX); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4727 line_height = GetWindowLong (hwnd, WND_LINEHEIGHT_INDEX); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4728 internal_border = GetWindowLong (hwnd, WND_BORDER_INDEX); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4729 scrollbar_extra = GetWindowLong (hwnd, WND_SCROLLBAR_INDEX); |
13434 | 4730 |
14353 | 4731 leave_crit (); |
13434 | 4732 |
4733 memset (&rect, 0, sizeof (rect)); | |
4734 AdjustWindowRect (&rect, GetWindowLong (hwnd, GWL_STYLE), | |
4735 GetMenu (hwnd) != NULL); | |
4736 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4737 /* Force width and height of client area to be exact |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4738 multiples of the character cell dimensions. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4739 wdiff = (lppos->cx - (rect.right - rect.left) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4740 - 2 * internal_border - scrollbar_extra) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4741 % font_width; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4742 hdiff = (lppos->cy - (rect.bottom - rect.top) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4743 - 2 * internal_border) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4744 % line_height; |
13434 | 4745 |
4746 if (wdiff || hdiff) | |
4747 { | |
4748 /* For right/bottom sizing we can just fix the sizes. | |
4749 However for top/left sizing we will need to fix the X | |
4750 and Y positions as well. */ | |
4751 | |
4752 lppos->cx -= wdiff; | |
4753 lppos->cy -= hdiff; | |
4754 | |
4755 if (wp.showCmd != SW_SHOWMAXIMIZED | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4756 && (lppos->flags & SWP_NOMOVE) == 0) |
13434 | 4757 { |
4758 if (lppos->x != wr.left || lppos->y != wr.top) | |
4759 { | |
4760 lppos->x += wdiff; | |
4761 lppos->y += hdiff; | |
4762 } | |
4763 else | |
4764 { | |
4765 lppos->flags |= SWP_NOMOVE; | |
4766 } | |
4767 } | |
4768 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4769 return 0; |
13434 | 4770 } |
4771 } | |
4772 } | |
4773 | |
4774 goto dflt; | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4775 |
24479
3b2c3636bf0e
(w32_wnd_proc): Handle WM_GETMINMAXINFO message.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24412
diff
changeset
|
4776 case WM_GETMINMAXINFO: |
3b2c3636bf0e
(w32_wnd_proc): Handle WM_GETMINMAXINFO message.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24412
diff
changeset
|
4777 /* Hack to correct bug that allows Emacs frames to be resized |
3b2c3636bf0e
(w32_wnd_proc): Handle WM_GETMINMAXINFO message.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24412
diff
changeset
|
4778 below the Minimum Tracking Size. */ |
3b2c3636bf0e
(w32_wnd_proc): Handle WM_GETMINMAXINFO message.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24412
diff
changeset
|
4779 ((LPMINMAXINFO) lParam)->ptMinTrackSize.y++; |
3b2c3636bf0e
(w32_wnd_proc): Handle WM_GETMINMAXINFO message.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24412
diff
changeset
|
4780 return 0; |
3b2c3636bf0e
(w32_wnd_proc): Handle WM_GETMINMAXINFO message.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24412
diff
changeset
|
4781 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4782 case WM_EMACS_CREATESCROLLBAR: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4783 return (LRESULT) w32_createscrollbar ((struct frame *) wParam, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4784 (struct scroll_bar *) lParam); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4785 |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4786 case WM_EMACS_SHOWWINDOW: |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4787 return ShowWindow ((HWND) wParam, (WPARAM) lParam); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4788 |
21608
d191a8737145
(w32_msg_pump): Handle WM_EMACS_SETLOCALE.
Geoff Voelker <voelker@cs.washington.edu>
parents:
19707
diff
changeset
|
4789 case WM_EMACS_SETFOREGROUND: |
24718
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4790 { |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4791 HWND foreground_window; |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4792 DWORD foreground_thread, retval; |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4793 |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4794 /* On NT 5.0, and apparently Windows 98, it is necessary to |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4795 attach to the thread that currently has focus in order to |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4796 pull the focus away from it. */ |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4797 foreground_window = GetForegroundWindow (); |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4798 foreground_thread = GetWindowThreadProcessId (foreground_window, NULL); |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4799 if (!foreground_window |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4800 || foreground_thread == GetCurrentThreadId () |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4801 || !AttachThreadInput (GetCurrentThreadId (), |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4802 foreground_thread, TRUE)) |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4803 foreground_thread = 0; |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4804 |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4805 retval = SetForegroundWindow ((HWND) wParam); |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4806 |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4807 /* Detach from the previous foreground thread. */ |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4808 if (foreground_thread) |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4809 AttachThreadInput (GetCurrentThreadId (), |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4810 foreground_thread, FALSE); |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4811 |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4812 return retval; |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
4813 } |
21608
d191a8737145
(w32_msg_pump): Handle WM_EMACS_SETLOCALE.
Geoff Voelker <voelker@cs.washington.edu>
parents:
19707
diff
changeset
|
4814 |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4815 case WM_EMACS_SETWINDOWPOS: |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4816 { |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4817 WINDOWPOS * pos = (WINDOWPOS *) wParam; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4818 return SetWindowPos (hwnd, pos->hwndInsertAfter, |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4819 pos->x, pos->y, pos->cx, pos->cy, pos->flags); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
4820 } |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4821 |
13434 | 4822 case WM_EMACS_DESTROYWINDOW: |
21884 | 4823 DragAcceptFiles ((HWND) wParam, FALSE); |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4824 return DestroyWindow ((HWND) wParam); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4825 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4826 case WM_EMACS_TRACKPOPUPMENU: |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4827 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4828 UINT flags; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4829 POINT *pos; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4830 int retval; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4831 pos = (POINT *)lParam; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4832 flags = TPM_CENTERALIGN; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4833 if (button_state & LMOUSE) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4834 flags |= TPM_LEFTBUTTON; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4835 else if (button_state & RMOUSE) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4836 flags |= TPM_RIGHTBUTTON; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4837 |
21735
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4838 /* Remember we did a SetCapture on the initial mouse down event, |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4839 so for safety, we make sure the capture is cancelled now. */ |
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4840 ReleaseCapture (); |
23160
95a213639589
(w32_wnd_proc): Always zero button_state when releasing
Geoff Voelker <voelker@cs.washington.edu>
parents:
22625
diff
changeset
|
4841 button_state = 0; |
21735
711a61942023
(x_set_vertical_scroll_bars): Put scroll bars on the
Geoff Voelker <voelker@cs.washington.edu>
parents:
21608
diff
changeset
|
4842 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4843 /* Use menubar_active to indicate that WM_INITMENU is from |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4844 TrackPopupMenu below, and should be ignored. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4845 f = x_window_to_frame (dpyinfo, hwnd); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4846 if (f) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4847 f->output_data.w32->menubar_active = 1; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4848 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4849 if (TrackPopupMenu ((HMENU)wParam, flags, pos->x, pos->y, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4850 0, hwnd, NULL)) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4851 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4852 MSG amsg; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4853 /* Eat any mouse messages during popupmenu */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4854 while (PeekMessage (&amsg, hwnd, WM_MOUSEFIRST, WM_MOUSELAST, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4855 PM_REMOVE)); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4856 /* Get the menu selection, if any */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4857 if (PeekMessage (&amsg, hwnd, WM_COMMAND, WM_COMMAND, PM_REMOVE)) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4858 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4859 retval = LOWORD (amsg.wParam); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4860 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4861 else |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4862 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4863 retval = 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4864 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4865 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4866 else |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4867 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4868 retval = -1; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4869 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4870 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4871 return retval; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4872 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4873 |
13434 | 4874 default: |
21874
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
4875 /* Check for messages registered at runtime. */ |
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
4876 if (msg == msh_mousewheel) |
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
4877 { |
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
4878 wmsg.dwModifiers = w32_get_modifiers (); |
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
4879 my_post_msg (&wmsg, hwnd, msg, wParam, lParam); |
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
4880 return 0; |
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
4881 } |
c0871d40073e
(msh_mousewheel): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21735
diff
changeset
|
4882 |
13434 | 4883 dflt: |
4884 return DefWindowProc (hwnd, msg, wParam, lParam); | |
4885 } | |
4886 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4887 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4888 /* The most common default return code for handled messages is 0. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4889 return 0; |
13434 | 4890 } |
4891 | |
4892 void | |
4893 my_create_window (f) | |
4894 struct frame * f; | |
4895 { | |
4896 MSG msg; | |
4897 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4898 if (!PostThreadMessage (dwWindowsThreadId, WM_EMACS_CREATEWINDOW, (WPARAM)f, 0)) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4899 abort (); |
13434 | 4900 GetMessage (&msg, NULL, WM_EMACS_DONE, WM_EMACS_DONE); |
4901 } | |
4902 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
4903 /* Create and set up the w32 window for frame F. */ |
13434 | 4904 |
4905 static void | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
4906 w32_window (f, window_prompting, minibuffer_only) |
13434 | 4907 struct frame *f; |
4908 long window_prompting; | |
4909 int minibuffer_only; | |
4910 { | |
4911 BLOCK_INPUT; | |
4912 | |
4913 /* Use the resource name as the top-level window name | |
4914 for looking up resources. Make a non-Lisp copy | |
4915 for the window manager, so GC relocation won't bother it. | |
4916 | |
4917 Elsewhere we specify the window name for the window manager. */ | |
4918 | |
4919 { | |
4920 char *str = (char *) XSTRING (Vx_resource_name)->data; | |
4921 f->namebuf = (char *) xmalloc (strlen (str) + 1); | |
4922 strcpy (f->namebuf, str); | |
4923 } | |
4924 | |
4925 my_create_window (f); | |
4926 | |
4927 validate_x_resource_name (); | |
4928 | |
4929 /* x_set_name normally ignores requests to set the name if the | |
4930 requested name is the same as the current name. This is the one | |
4931 place where that assumption isn't correct; f->name is set, but | |
4932 the server hasn't been told. */ | |
4933 { | |
4934 Lisp_Object name; | |
4935 int explicit = f->explicit_name; | |
4936 | |
4937 f->explicit_name = 0; | |
4938 name = f->name; | |
4939 f->name = Qnil; | |
4940 x_set_name (f, name, explicit); | |
4941 } | |
4942 | |
4943 UNBLOCK_INPUT; | |
4944 | |
4945 if (!minibuffer_only && FRAME_EXTERNAL_MENU_BAR (f)) | |
4946 initialize_frame_menubar (f); | |
4947 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
4948 if (FRAME_W32_WINDOW (f) == 0) |
13434 | 4949 error ("Unable to create window"); |
4950 } | |
4951 | |
4952 /* Handle the icon stuff for this window. Perhaps later we might | |
4953 want an x_set_icon_position which can be called interactively as | |
4954 well. */ | |
4955 | |
4956 static void | |
4957 x_icon (f, parms) | |
4958 struct frame *f; | |
4959 Lisp_Object parms; | |
4960 { | |
4961 Lisp_Object icon_x, icon_y; | |
4962 | |
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16602
diff
changeset
|
4963 /* Set the position of the icon. Note that Windows 95 groups all |
13434 | 4964 icons in the tray. */ |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
4965 icon_x = w32_get_arg (parms, Qicon_left, 0, 0, RES_TYPE_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
4966 icon_y = w32_get_arg (parms, Qicon_top, 0, 0, RES_TYPE_NUMBER); |
13434 | 4967 if (!EQ (icon_x, Qunbound) && !EQ (icon_y, Qunbound)) |
4968 { | |
4969 CHECK_NUMBER (icon_x, 0); | |
4970 CHECK_NUMBER (icon_y, 0); | |
4971 } | |
4972 else if (!EQ (icon_x, Qunbound) || !EQ (icon_y, Qunbound)) | |
4973 error ("Both left and top icon corners of icon must be specified"); | |
4974 | |
4975 BLOCK_INPUT; | |
4976 | |
4977 if (! EQ (icon_x, Qunbound)) | |
4978 x_wm_set_icon_position (f, XINT (icon_x), XINT (icon_y)); | |
4979 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4980 #if 0 /* TODO */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4981 /* Start up iconic or window? */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4982 x_wm_set_window_state |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
4983 (f, (EQ (w32_get_arg (parms, Qvisibility, 0, 0, RES_TYPE_SYMBOL), Qicon) |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4984 ? IconicState |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4985 : NormalState)); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4986 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4987 x_text_icon (f, (char *) XSTRING ((!NILP (f->icon_name) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4988 ? f->icon_name |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4989 : f->name))->data); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4990 #endif |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
4991 |
13434 | 4992 UNBLOCK_INPUT; |
4993 } | |
4994 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
4995 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
4996 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
4997 x_make_gc (f) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
4998 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
4999 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5000 XGCValues gc_values; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5001 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5002 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5003 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5004 /* Create the GC's of this frame. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5005 Note that many default values are used. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5006 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5007 /* Normal video */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5008 gc_values.font = f->output_data.w32->font; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5009 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5010 /* Cursor has cursor-color background, background-color foreground. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5011 gc_values.foreground = FRAME_BACKGROUND_PIXEL (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5012 gc_values.background = f->output_data.w32->cursor_pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5013 f->output_data.w32->cursor_gc |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5014 = XCreateGC (NULL, FRAME_W32_WINDOW (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5015 (GCFont | GCForeground | GCBackground), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5016 &gc_values); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5017 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5018 /* Reliefs. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5019 f->output_data.w32->white_relief.gc = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5020 f->output_data.w32->black_relief.gc = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5021 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5022 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5023 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5024 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5025 |
13434 | 5026 DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame, |
5027 1, 1, 0, | |
5028 "Make a new window, which is called a \"frame\" in Emacs terms.\n\ | |
5029 Returns an Emacs frame object.\n\ | |
5030 ALIST is an alist of frame parameters.\n\ | |
5031 If the parameters specify that the frame should not have a minibuffer,\n\ | |
5032 and do not specify a specific minibuffer window to use,\n\ | |
5033 then `default-minibuffer-frame' must be a frame whose minibuffer can\n\ | |
5034 be shared by the new frame.\n\ | |
5035 \n\ | |
5036 This function is an internal primitive--use `make-frame' instead.") | |
5037 (parms) | |
5038 Lisp_Object parms; | |
5039 { | |
5040 struct frame *f; | |
5041 Lisp_Object frame, tem; | |
5042 Lisp_Object name; | |
5043 int minibuffer_only = 0; | |
5044 long window_prompting = 0; | |
5045 int width, height; | |
5046 int count = specpdl_ptr - specpdl; | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5047 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
13434 | 5048 Lisp_Object display; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5049 struct w32_display_info *dpyinfo = NULL; |
13434 | 5050 Lisp_Object parent; |
5051 struct kboard *kb; | |
5052 | |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5053 check_w32 (); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5054 |
13434 | 5055 /* Use this general default value to start with |
5056 until we know if this frame has a specified name. */ | |
5057 Vx_resource_name = Vinvocation_name; | |
5058 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5059 display = w32_get_arg (parms, Qdisplay, 0, 0, RES_TYPE_STRING); |
13434 | 5060 if (EQ (display, Qunbound)) |
5061 display = Qnil; | |
5062 dpyinfo = check_x_display_info (display); | |
5063 #ifdef MULTI_KBOARD | |
5064 kb = dpyinfo->kboard; | |
5065 #else | |
5066 kb = &the_only_kboard; | |
5067 #endif | |
5068 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5069 name = w32_get_arg (parms, Qname, "name", "Name", RES_TYPE_STRING); |
13434 | 5070 if (!STRINGP (name) |
5071 && ! EQ (name, Qunbound) | |
5072 && ! NILP (name)) | |
5073 error ("Invalid frame name--not a string or nil"); | |
5074 | |
5075 if (STRINGP (name)) | |
5076 Vx_resource_name = name; | |
5077 | |
5078 /* See if parent window is specified. */ | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5079 parent = w32_get_arg (parms, Qparent_id, NULL, NULL, RES_TYPE_NUMBER); |
13434 | 5080 if (EQ (parent, Qunbound)) |
5081 parent = Qnil; | |
5082 if (! NILP (parent)) | |
5083 CHECK_NUMBER (parent, 0); | |
5084 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5085 /* make_frame_without_minibuffer can run Lisp code and garbage collect. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5086 /* No need to protect DISPLAY because that's not used after passing |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5087 it to make_frame_without_minibuffer. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5088 frame = Qnil; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5089 GCPRO4 (parms, parent, name, frame); |
32669
092d2df2a6c3
(Fx_create_frame): Don't bother calling
Jason Rumney <jasonr@gnu.org>
parents:
31110
diff
changeset
|
5090 tem = w32_get_arg (parms, Qminibuffer, "minibuffer", "Minibuffer", |
092d2df2a6c3
(Fx_create_frame): Don't bother calling
Jason Rumney <jasonr@gnu.org>
parents:
31110
diff
changeset
|
5091 RES_TYPE_SYMBOL); |
13434 | 5092 if (EQ (tem, Qnone) || NILP (tem)) |
5093 f = make_frame_without_minibuffer (Qnil, kb, display); | |
5094 else if (EQ (tem, Qonly)) | |
5095 { | |
5096 f = make_minibuffer_frame (); | |
5097 minibuffer_only = 1; | |
5098 } | |
5099 else if (WINDOWP (tem)) | |
5100 f = make_frame_without_minibuffer (tem, kb, display); | |
5101 else | |
5102 f = make_frame (1); | |
5103 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5104 XSETFRAME (frame, f); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5105 |
13434 | 5106 /* Note that Windows does support scroll bars. */ |
5107 FRAME_CAN_HAVE_SCROLL_BARS (f) = 1; | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5108 /* By default, make scrollbars the system standard width. */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5109 f->scroll_bar_pixel_width = GetSystemMetrics (SM_CXVSCROLL); |
13434 | 5110 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5111 f->output_method = output_w32; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5112 f->output_data.w32 = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5113 (struct w32_output *) xmalloc (sizeof (struct w32_output)); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5114 bzero (f->output_data.w32, sizeof (struct w32_output)); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5115 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5116 FRAME_FONTSET (f) = -1; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5117 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5118 f->icon_name |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5119 = w32_get_arg (parms, Qicon_name, "iconName", "Title", RES_TYPE_STRING); |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5120 if (! STRINGP (f->icon_name)) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5121 f->icon_name = Qnil; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5122 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5123 /* FRAME_W32_DISPLAY_INFO (f) = dpyinfo; */ |
13434 | 5124 #ifdef MULTI_KBOARD |
5125 FRAME_KBOARD (f) = kb; | |
5126 #endif | |
5127 | |
5128 /* Specify the parent under which to make this window. */ | |
5129 | |
5130 if (!NILP (parent)) | |
5131 { | |
32669
092d2df2a6c3
(Fx_create_frame): Don't bother calling
Jason Rumney <jasonr@gnu.org>
parents:
31110
diff
changeset
|
5132 f->output_data.w32->parent_desc = (Window) XFASTINT (parent); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5133 f->output_data.w32->explicit_parent = 1; |
13434 | 5134 } |
5135 else | |
5136 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5137 f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5138 f->output_data.w32->explicit_parent = 0; |
13434 | 5139 } |
5140 | |
5141 /* Set the name; the functions to which we pass f expect the name to | |
5142 be set. */ | |
5143 if (EQ (name, Qunbound) || NILP (name)) | |
5144 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5145 f->name = build_string (dpyinfo->w32_id_name); |
13434 | 5146 f->explicit_name = 0; |
5147 } | |
5148 else | |
5149 { | |
5150 f->name = name; | |
5151 f->explicit_name = 1; | |
5152 /* use the frame's title when getting resources for this frame. */ | |
5153 specbind (Qx_resource_name, name); | |
5154 } | |
5155 | |
5156 /* Extract the window parameters from the supplied values | |
5157 that are needed to determine window geometry. */ | |
5158 { | |
5159 Lisp_Object font; | |
5160 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5161 font = w32_get_arg (parms, Qfont, "font", "Font", RES_TYPE_STRING); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5162 |
13434 | 5163 BLOCK_INPUT; |
5164 /* First, try whatever font the caller has specified. */ | |
5165 if (STRINGP (font)) | |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5166 { |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5167 tem = Fquery_fontset (font, Qnil); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5168 if (STRINGP (tem)) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5169 font = x_new_fontset (f, XSTRING (tem)->data); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5170 else |
24481
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
5171 font = x_new_font (f, XSTRING (font)->data); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5172 } |
13434 | 5173 /* Try out a font which we hope has bold and italic variations. */ |
5174 if (!STRINGP (font)) | |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5175 font = x_new_font (f, "-*-Courier New-normal-r-*-*-13-*-*-*-c-*-iso8859-1"); |
13434 | 5176 if (! STRINGP (font)) |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5177 font = x_new_font (f, "-*-Courier-normal-r-*-*-13-*-*-*-c-*-iso8859-1"); |
13434 | 5178 /* If those didn't work, look for something which will at least work. */ |
5179 if (! STRINGP (font)) | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5180 font = x_new_font (f, "-*-Fixedsys-normal-r-*-*-12-*-*-*-c-*-iso8859-1"); |
13434 | 5181 UNBLOCK_INPUT; |
5182 if (! STRINGP (font)) | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5183 font = build_string ("Fixedsys"); |
13434 | 5184 |
5185 x_default_parameter (f, parms, Qfont, font, | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5186 "font", "Font", RES_TYPE_STRING); |
13434 | 5187 } |
5188 | |
5189 x_default_parameter (f, parms, Qborder_width, make_number (2), | |
32669
092d2df2a6c3
(Fx_create_frame): Don't bother calling
Jason Rumney <jasonr@gnu.org>
parents:
31110
diff
changeset
|
5190 "borderWidth", "BorderWidth", RES_TYPE_NUMBER); |
13434 | 5191 /* This defaults to 2 in order to match xterm. We recognize either |
5192 internalBorderWidth or internalBorder (which is what xterm calls | |
5193 it). */ | |
5194 if (NILP (Fassq (Qinternal_border_width, parms))) | |
5195 { | |
5196 Lisp_Object value; | |
5197 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5198 value = w32_get_arg (parms, Qinternal_border_width, |
32669
092d2df2a6c3
(Fx_create_frame): Don't bother calling
Jason Rumney <jasonr@gnu.org>
parents:
31110
diff
changeset
|
5199 "internalBorder", "InternalBorder", RES_TYPE_NUMBER); |
13434 | 5200 if (! EQ (value, Qunbound)) |
5201 parms = Fcons (Fcons (Qinternal_border_width, value), | |
5202 parms); | |
5203 } | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5204 /* Default internalBorderWidth to 0 on Windows to match other programs. */ |
13434 | 5205 x_default_parameter (f, parms, Qinternal_border_width, make_number (0), |
32669
092d2df2a6c3
(Fx_create_frame): Don't bother calling
Jason Rumney <jasonr@gnu.org>
parents:
31110
diff
changeset
|
5206 "internalBorderWidth", "InternalBorder", RES_TYPE_NUMBER); |
092d2df2a6c3
(Fx_create_frame): Don't bother calling
Jason Rumney <jasonr@gnu.org>
parents:
31110
diff
changeset
|
5207 x_default_parameter (f, parms, Qvertical_scroll_bars, Qright, |
092d2df2a6c3
(Fx_create_frame): Don't bother calling
Jason Rumney <jasonr@gnu.org>
parents:
31110
diff
changeset
|
5208 "verticalScrollBars", "ScrollBars", RES_TYPE_SYMBOL); |
13434 | 5209 |
5210 /* Also do the stuff which must be set before the window exists. */ | |
5211 x_default_parameter (f, parms, Qforeground_color, build_string ("black"), | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5212 "foreground", "Foreground", RES_TYPE_STRING); |
13434 | 5213 x_default_parameter (f, parms, Qbackground_color, build_string ("white"), |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5214 "background", "Background", RES_TYPE_STRING); |
13434 | 5215 x_default_parameter (f, parms, Qmouse_color, build_string ("black"), |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5216 "pointerColor", "Foreground", RES_TYPE_STRING); |
13434 | 5217 x_default_parameter (f, parms, Qcursor_color, build_string ("black"), |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5218 "cursorColor", "Foreground", RES_TYPE_STRING); |
13434 | 5219 x_default_parameter (f, parms, Qborder_color, build_string ("black"), |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5220 "borderColor", "BorderColor", RES_TYPE_STRING); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5221 x_default_parameter (f, parms, Qscreen_gamma, Qnil, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5222 "screenGamma", "ScreenGamma", RES_TYPE_FLOAT); |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5223 x_default_parameter (f, parms, Qline_spacing, Qnil, |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5224 "lineSpacing", "LineSpacing", RES_TYPE_NUMBER); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5225 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5226 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5227 /* Init faces before x_default_parameter is called for scroll-bar |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5228 parameters because that function calls x_set_scroll_bar_width, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5229 which calls change_frame_size, which calls Fset_window_buffer, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5230 which runs hooks, which call Fvertical_motion. At the end, we |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5231 end up in init_iterator with a null face cache, which should not |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5232 happen. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5233 init_frame_faces (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5234 |
13434 | 5235 x_default_parameter (f, parms, Qmenu_bar_lines, make_number (1), |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5236 "menuBar", "MenuBar", RES_TYPE_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5237 x_default_parameter (f, parms, Qtool_bar_lines, make_number (0), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5238 "toolBar", "ToolBar", RES_TYPE_NUMBER); |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5239 x_default_parameter (f, parms, Qbuffer_predicate, Qnil, |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5240 "bufferPredicate", "BufferPredicate", RES_TYPE_SYMBOL); |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5241 x_default_parameter (f, parms, Qtitle, Qnil, |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5242 "title", "Title", RES_TYPE_STRING); |
13434 | 5243 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5244 f->output_data.w32->dwStyle = WS_OVERLAPPEDWINDOW; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5245 f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window; |
13434 | 5246 window_prompting = x_figure_window_size (f, parms); |
5247 | |
5248 if (window_prompting & XNegative) | |
5249 { | |
5250 if (window_prompting & YNegative) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5251 f->output_data.w32->win_gravity = SouthEastGravity; |
13434 | 5252 else |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5253 f->output_data.w32->win_gravity = NorthEastGravity; |
13434 | 5254 } |
5255 else | |
5256 { | |
5257 if (window_prompting & YNegative) | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5258 f->output_data.w32->win_gravity = SouthWestGravity; |
13434 | 5259 else |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5260 f->output_data.w32->win_gravity = NorthWestGravity; |
13434 | 5261 } |
5262 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5263 f->output_data.w32->size_hint_flags = window_prompting; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5264 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5265 tem = w32_get_arg (parms, Qunsplittable, 0, 0, RES_TYPE_BOOLEAN); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5266 f->no_split = minibuffer_only || EQ (tem, Qt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5267 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5268 /* Create the window. Add the tool-bar height to the initial frame |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5269 height so that the user gets a text display area of the size he |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5270 specified with -g or via the registry. Later changes of the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5271 tool-bar height don't change the frame size. This is done so that |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5272 users can create tall Emacs frames without having to guess how |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5273 tall the tool-bar will get. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5274 f->height += FRAME_TOOL_BAR_LINES (f); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5275 w32_window (f, window_prompting, minibuffer_only); |
13434 | 5276 x_icon (f, parms); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5277 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5278 x_make_gc (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5279 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5280 /* Now consider the frame official. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5281 FRAME_W32_DISPLAY_INFO (f)->reference_count++; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5282 Vframe_list = Fcons (frame, Vframe_list); |
13434 | 5283 |
5284 /* We need to do this after creating the window, so that the | |
5285 icon-creation functions can say whose icon they're describing. */ | |
5286 x_default_parameter (f, parms, Qicon_type, Qnil, | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5287 "bitmapIcon", "BitmapIcon", RES_TYPE_SYMBOL); |
13434 | 5288 |
5289 x_default_parameter (f, parms, Qauto_raise, Qnil, | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5290 "autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN); |
13434 | 5291 x_default_parameter (f, parms, Qauto_lower, Qnil, |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5292 "autoLower", "AutoRaiseLower", RES_TYPE_BOOLEAN); |
13434 | 5293 x_default_parameter (f, parms, Qcursor_type, Qbox, |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5294 "cursorType", "CursorType", RES_TYPE_SYMBOL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5295 x_default_parameter (f, parms, Qscroll_bar_width, Qnil, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5296 "scrollBarWidth", "ScrollBarWidth", RES_TYPE_NUMBER); |
13434 | 5297 |
5298 /* Dimensions, especially f->height, must be done via change_frame_size. | |
5299 Change will not be effected unless different from the current | |
5300 f->height. */ | |
5301 width = f->width; | |
5302 height = f->height; | |
16259
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
5303 f->height = 0; |
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
5304 SET_FRAME_WIDTH (f, 0); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5305 change_frame_size (f, height, width, 1, 0, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5306 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5307 /* Tell the server what size and position, etc, we want, and how |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5308 badly we want them. This should be done after we have the menu |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5309 bar so that its size can be taken into account. */ |
13434 | 5310 BLOCK_INPUT; |
5311 x_wm_set_size_hint (f, window_prompting, 0); | |
5312 UNBLOCK_INPUT; | |
5313 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5314 /* Make the window appear on the frame and enable display, unless |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5315 the caller says not to. However, with explicit parent, Emacs |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5316 cannot control visibility, so don't try. */ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5317 if (! f->output_data.w32->explicit_parent) |
13434 | 5318 { |
5319 Lisp_Object visibility; | |
5320 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5321 visibility = w32_get_arg (parms, Qvisibility, 0, 0, RES_TYPE_SYMBOL); |
13434 | 5322 if (EQ (visibility, Qunbound)) |
5323 visibility = Qt; | |
5324 | |
5325 if (EQ (visibility, Qicon)) | |
5326 x_iconify_frame (f); | |
5327 else if (! NILP (visibility)) | |
5328 x_make_frame_visible (f); | |
5329 else | |
5330 /* Must have been Qnil. */ | |
5331 ; | |
5332 } | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5333 UNGCPRO; |
13434 | 5334 return unbind_to (count, frame); |
5335 } | |
5336 | |
5337 /* FRAME is used only to get a handle on the X display. We don't pass the | |
5338 display info directly because we're called from frame.c, which doesn't | |
5339 know about that structure. */ | |
5340 Lisp_Object | |
5341 x_get_focus_frame (frame) | |
5342 struct frame *frame; | |
5343 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5344 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (frame); |
13434 | 5345 Lisp_Object xfocus; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5346 if (! dpyinfo->w32_focus_frame) |
13434 | 5347 return Qnil; |
5348 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5349 XSETFRAME (xfocus, dpyinfo->w32_focus_frame); |
13434 | 5350 return xfocus; |
5351 } | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5352 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5353 DEFUN ("w32-focus-frame", Fw32_focus_frame, Sw32_focus_frame, 1, 1, 0, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5354 "Give FRAME input focus, raising to foreground if necessary.") |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5355 (frame) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5356 Lisp_Object frame; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5357 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5358 x_focus_on_frame (check_x_frame (frame)); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5359 return Qnil; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5360 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5361 |
13434 | 5362 |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5363 struct font_info *w32_load_bdf_font (struct frame *f, char *fontname, |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5364 int size, char* filename); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5365 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5366 struct font_info * |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5367 w32_load_system_font (f,fontname,size) |
24670 | 5368 struct frame *f; |
5369 char * fontname; | |
5370 int size; | |
13434 | 5371 { |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5372 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5373 Lisp_Object font_names; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5374 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5375 /* Get a list of all the fonts that match this name. Once we |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5376 have a list of matching fonts, we compare them against the fonts |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5377 we already have loaded by comparing names. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5378 font_names = w32_list_fonts (f, build_string (fontname), size, 100); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5379 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5380 if (!NILP (font_names)) |
14353 | 5381 { |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5382 Lisp_Object tail; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5383 int i; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5384 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5385 /* First check if any are already loaded, as that is cheaper |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5386 than loading another one. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5387 for (i = 0; i < dpyinfo->n_fonts; i++) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
5388 for (tail = font_names; CONSP (tail); tail = XCDR (tail)) |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5389 if (dpyinfo->font_table[i].name |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5390 && (!strcmp (dpyinfo->font_table[i].name, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5391 XSTRING (XCAR (tail))->data) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5392 || !strcmp (dpyinfo->font_table[i].full_name, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5393 XSTRING (XCAR (tail))->data))) |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5394 return (dpyinfo->font_table + i); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5395 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
5396 fontname = (char *) XSTRING (XCAR (font_names))->data; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5397 } |
24481
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
5398 else if (w32_strict_fontnames) |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
5399 { |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
5400 /* If EnumFontFamiliesEx was available, we got a full list of |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
5401 fonts back so stop now to avoid the possibility of loading a |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
5402 random font. If we had to fall back to EnumFontFamilies, the |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
5403 list is incomplete, so continue whether the font we want was |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
5404 listed or not. */ |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
5405 HMODULE gdi32 = GetModuleHandle ("gdi32.dll"); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
5406 FARPROC enum_font_families_ex |
24481
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
5407 = GetProcAddress (gdi32, "EnumFontFamiliesExA"); |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
5408 if (enum_font_families_ex) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
5409 return NULL; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
5410 } |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5411 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5412 /* Load the font and add it to the table. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5413 { |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5414 char *full_name, *encoding; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5415 XFontStruct *font; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5416 struct font_info *fontp; |
14353 | 5417 LOGFONT lf; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5418 BOOL ok; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5419 int i; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5420 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5421 if (!fontname || !x_to_w32_font (fontname, &lf)) |
14353 | 5422 return (NULL); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5423 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5424 if (!*lf.lfFaceName) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5425 /* If no name was specified for the font, we get a random font |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5426 from CreateFontIndirect - this is not particularly |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5427 desirable, especially since CreateFontIndirect does not |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5428 fill out the missing name in lf, so we never know what we |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5429 ended up with. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5430 return NULL; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5431 |
14353 | 5432 font = (XFontStruct *) xmalloc (sizeof (XFontStruct)); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5433 |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5434 /* Set bdf to NULL to indicate that this is a Windows font. */ |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5435 font->bdf = NULL; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5436 |
14353 | 5437 BLOCK_INPUT; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5438 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5439 font->hfont = CreateFontIndirect (&lf); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5440 |
23620
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5441 if (font->hfont == NULL) |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5442 { |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5443 ok = FALSE; |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5444 } |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5445 else |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5446 { |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5447 HDC hdc; |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5448 HANDLE oldobj; |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5449 |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5450 hdc = GetDC (dpyinfo->root_window); |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5451 oldobj = SelectObject (hdc, font->hfont); |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5452 ok = GetTextMetrics (hdc, &font->tm); |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5453 font->double_byte_p = GetFontLanguageInfo(hdc) & GCP_DBCS; |
23620
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5454 SelectObject (hdc, oldobj); |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5455 ReleaseDC (dpyinfo->root_window, hdc); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5456 /* Fill out details in lf according to the font that was |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5457 actually loaded. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5458 lf.lfHeight = font->tm.tmInternalLeading - font->tm.tmHeight; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5459 lf.lfWidth = font->tm.tmAveCharWidth; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5460 lf.lfWeight = font->tm.tmWeight; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5461 lf.lfItalic = font->tm.tmItalic; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5462 lf.lfCharSet = font->tm.tmCharSet; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5463 lf.lfPitchAndFamily = ((font->tm.tmPitchAndFamily & TMPF_FIXED_PITCH) |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
5464 ? VARIABLE_PITCH : FIXED_PITCH); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5465 lf.lfOutPrecision = ((font->tm.tmPitchAndFamily & TMPF_VECTOR) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5466 ? OUT_STROKE_PRECIS : OUT_STRING_PRECIS); |
23620
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5467 } |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5468 |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5469 UNBLOCK_INPUT; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5470 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5471 if (!ok) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5472 { |
23620
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5473 w32_unload_font (dpyinfo, font); |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5474 return (NULL); |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5475 } |
13434 | 5476 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5477 /* Find a free slot in the font table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5478 for (i = 0; i < dpyinfo->n_fonts; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5479 if (dpyinfo->font_table[i].name == NULL) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5480 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5481 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5482 /* If no free slot found, maybe enlarge the font table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5483 if (i == dpyinfo->n_fonts |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5484 && dpyinfo->n_fonts == dpyinfo->font_table_size) |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5485 { |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5486 int sz; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5487 dpyinfo->font_table_size = max (16, 2 * dpyinfo->font_table_size); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5488 sz = dpyinfo->font_table_size * sizeof *dpyinfo->font_table; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5489 dpyinfo->font_table |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5490 = (struct font_info *) xrealloc (dpyinfo->font_table, sz); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5491 } |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5492 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5493 fontp = dpyinfo->font_table + i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5494 if (i == dpyinfo->n_fonts) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5495 ++dpyinfo->n_fonts; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5496 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5497 /* Now fill in the slots of *FONTP. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5498 BLOCK_INPUT; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5499 fontp->font = font; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5500 fontp->font_idx = i; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5501 fontp->name = (char *) xmalloc (strlen (fontname) + 1); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5502 bcopy (fontname, fontp->name, strlen (fontname) + 1); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5503 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5504 /* Work out the font's full name. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5505 full_name = (char *)xmalloc (100); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5506 if (full_name && w32_to_x_font (&lf, full_name, 100)) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5507 fontp->full_name = full_name; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5508 else |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5509 { |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5510 /* If all else fails - just use the name we used to load it. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5511 xfree (full_name); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5512 fontp->full_name = fontp->name; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5513 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5514 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5515 fontp->size = FONT_WIDTH (font); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5516 fontp->height = FONT_HEIGHT (font); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5517 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5518 /* The slot `encoding' specifies how to map a character |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5519 code-points (0x20..0x7F or 0x2020..0x7F7F) of each charset to |
28272
f62bb21d38db
(w32_wnd_proc): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27936
diff
changeset
|
5520 the font code-points (0:0x20..0x7F, 1:0xA0..0xFF), or |
f62bb21d38db
(w32_wnd_proc): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27936
diff
changeset
|
5521 (0:0x20..0x7F, 1:0xA0..0xFF, |
f62bb21d38db
(w32_wnd_proc): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27936
diff
changeset
|
5522 (0:0x2020..0x7F7F, 1:0xA0A0..0xFFFF, 3:0x20A0..0x7FFF, |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5523 2:0xA020..0xFF7F). For the moment, we don't know which charset |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5524 uses this font. So, we set information in fontp->encoding[1] |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5525 which is never used by any charset. If mapping can't be |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5526 decided, set FONT_ENCODING_NOT_DECIDED. */ |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5527 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5528 /* SJIS fonts need to be set to type 4, all others seem to work as |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5529 type FONT_ENCODING_NOT_DECIDED. */ |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5530 encoding = strrchr (fontp->name, '-'); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5531 if (encoding && stricmp (encoding+1, "sjis") == 0) |
24692
a0a2521b783d
(x_to_w32_charset): Fix typo: want to map all Japanese
Andrew Innes <andrewi@gnu.org>
parents:
24679
diff
changeset
|
5532 fontp->encoding[1] = 4; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5533 else |
24692
a0a2521b783d
(x_to_w32_charset): Fix typo: want to map all Japanese
Andrew Innes <andrewi@gnu.org>
parents:
24679
diff
changeset
|
5534 fontp->encoding[1] = FONT_ENCODING_NOT_DECIDED; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5535 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5536 /* The following three values are set to 0 under W32, which is |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5537 what they get set to if XGetFontProperty fails under X. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5538 fontp->baseline_offset = 0; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5539 fontp->relative_compose = 0; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5540 fontp->default_ascent = 0; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5541 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5542 /* Set global flag fonts_changed_p to non-zero if the font loaded |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5543 has a character with a smaller width than any other character |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5544 before, or if the font loaded has a smalle>r height than any |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5545 other font loaded before. If this happens, it will make a |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5546 glyph matrix reallocation necessary. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5547 fonts_changed_p = x_compute_min_glyph_bounds (f); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5548 UNBLOCK_INPUT; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5549 return fontp; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5550 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5551 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5552 |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5553 /* Load font named FONTNAME of size SIZE for frame F, and return a |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5554 pointer to the structure font_info while allocating it dynamically. |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5555 If loading fails, return NULL. */ |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5556 struct font_info * |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5557 w32_load_font (f,fontname,size) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5558 struct frame *f; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5559 char * fontname; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5560 int size; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5561 { |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5562 Lisp_Object bdf_fonts; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5563 struct font_info *retval = NULL; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5564 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5565 bdf_fonts = w32_list_bdf_fonts (build_string (fontname)); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5566 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5567 while (!retval && CONSP (bdf_fonts)) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5568 { |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5569 char *bdf_name, *bdf_file; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5570 Lisp_Object bdf_pair; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5571 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
5572 bdf_name = XSTRING (XCAR (bdf_fonts))->data; |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
5573 bdf_pair = Fassoc (XCAR (bdf_fonts), Vw32_bdf_filename_alist); |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
5574 bdf_file = XSTRING (XCDR (bdf_pair))->data; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5575 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5576 retval = w32_load_bdf_font (f, bdf_name, size, bdf_file); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5577 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
5578 bdf_fonts = XCDR (bdf_fonts); |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5579 } |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5580 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5581 if (retval) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5582 return retval; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5583 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5584 return w32_load_system_font(f, fontname, size); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5585 } |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5586 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5587 |
13434 | 5588 void |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5589 w32_unload_font (dpyinfo, font) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5590 struct w32_display_info *dpyinfo; |
13434 | 5591 XFontStruct * font; |
5592 { | |
5593 if (font) | |
5594 { | |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5595 if (font->bdf) w32_free_bdf_font (font->bdf); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5596 |
14353 | 5597 if (font->hfont) DeleteObject(font->hfont); |
13434 | 5598 xfree (font); |
5599 } | |
5600 } | |
5601 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5602 /* The font conversion stuff between x and w32 */ |
13434 | 5603 |
5604 /* X font string is as follows (from faces.el) | |
5605 * (let ((- "[-?]") | |
5606 * (foundry "[^-]+") | |
5607 * (family "[^-]+") | |
5608 * (weight "\\(bold\\|demibold\\|medium\\)") ; 1 | |
5609 * (weight\? "\\([^-]*\\)") ; 1 | |
5610 * (slant "\\([ior]\\)") ; 2 | |
5611 * (slant\? "\\([^-]?\\)") ; 2 | |
5612 * (swidth "\\([^-]*\\)") ; 3 | |
5613 * (adstyle "[^-]*") ; 4 | |
5614 * (pixelsize "[0-9]+") | |
5615 * (pointsize "[0-9][0-9]+") | |
5616 * (resx "[0-9][0-9]+") | |
5617 * (resy "[0-9][0-9]+") | |
5618 * (spacing "[cmp?*]") | |
5619 * (avgwidth "[0-9]+") | |
5620 * (registry "[^-]+") | |
5621 * (encoding "[^-]+") | |
5622 * ) | |
5623 */ | |
5624 | |
5625 LONG | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5626 x_to_w32_weight (lpw) |
13434 | 5627 char * lpw; |
5628 { | |
5629 if (!lpw) return (FW_DONTCARE); | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5630 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5631 if (stricmp (lpw,"heavy") == 0) return FW_HEAVY; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5632 else if (stricmp (lpw,"extrabold") == 0) return FW_EXTRABOLD; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5633 else if (stricmp (lpw,"bold") == 0) return FW_BOLD; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5634 else if (stricmp (lpw,"demibold") == 0) return FW_SEMIBOLD; |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5635 else if (stricmp (lpw,"semibold") == 0) return FW_SEMIBOLD; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5636 else if (stricmp (lpw,"medium") == 0) return FW_MEDIUM; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5637 else if (stricmp (lpw,"normal") == 0) return FW_NORMAL; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5638 else if (stricmp (lpw,"light") == 0) return FW_LIGHT; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5639 else if (stricmp (lpw,"extralight") == 0) return FW_EXTRALIGHT; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5640 else if (stricmp (lpw,"thin") == 0) return FW_THIN; |
13434 | 5641 else |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5642 return FW_DONTCARE; |
13434 | 5643 } |
5644 | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5645 |
13434 | 5646 char * |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5647 w32_to_x_weight (fnweight) |
13434 | 5648 int fnweight; |
5649 { | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5650 if (fnweight >= FW_HEAVY) return "heavy"; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5651 if (fnweight >= FW_EXTRABOLD) return "extrabold"; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5652 if (fnweight >= FW_BOLD) return "bold"; |
24856
07a04c532706
(w32_to_x_weight): Return "demibold" instead of "semibold".
Andrew Innes <andrewi@gnu.org>
parents:
24751
diff
changeset
|
5653 if (fnweight >= FW_SEMIBOLD) return "demibold"; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5654 if (fnweight >= FW_MEDIUM) return "medium"; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5655 if (fnweight >= FW_NORMAL) return "normal"; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5656 if (fnweight >= FW_LIGHT) return "light"; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5657 if (fnweight >= FW_EXTRALIGHT) return "extralight"; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5658 if (fnweight >= FW_THIN) return "thin"; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5659 else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5660 return "*"; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5661 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5662 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5663 LONG |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5664 x_to_w32_charset (lpcs) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5665 char * lpcs; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5666 { |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5667 Lisp_Object rest; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5668 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5669 /* Look through w32-charset-info-alist for the character set. |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5670 Format of each entry is |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5671 (CHARSET_NAME . (WINDOWS_CHARSET . CODEPAGE)). |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5672 */ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5673 for (rest = Vw32_charset_info_alist; CONSP (rest); rest = XCDR (rest)) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5674 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5675 Lisp_Object this_entry = XCAR (rest); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5676 char * x_charset = XSTRING (XCAR (this_entry))->data; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5677 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5678 if (strnicmp (lpcs, x_charset, strlen(x_charset)) == 0) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5679 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5680 Lisp_Object w32_charset = XCAR (XCDR (this_entry)); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5681 // Translate Lisp symbol to number. |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5682 if (w32_charset == Qw32_charset_ansi) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5683 return ANSI_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5684 if (w32_charset == Qw32_charset_symbol) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5685 return SYMBOL_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5686 if (w32_charset == Qw32_charset_shiftjis) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5687 return SHIFTJIS_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5688 if (w32_charset == Qw32_charset_hangul) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5689 return HANGEUL_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5690 if (w32_charset == Qw32_charset_chinesebig5) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5691 return CHINESEBIG5_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5692 if (w32_charset == Qw32_charset_gb2312) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5693 return GB2312_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5694 if (w32_charset == Qw32_charset_oem) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5695 return OEM_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5696 #ifdef JOHAB_CHARSET |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5697 if (w32_charset == Qw32_charset_johab) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5698 return JOHAB_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5699 if (w32_charset == Qw32_charset_easteurope) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5700 return EASTEUROPE_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5701 if (w32_charset == Qw32_charset_turkish) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5702 return TURKISH_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5703 if (w32_charset == Qw32_charset_baltic) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5704 return BALTIC_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5705 if (w32_charset == Qw32_charset_russian) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5706 return RUSSIAN_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5707 if (w32_charset == Qw32_charset_arabic) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5708 return ARABIC_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5709 if (w32_charset == Qw32_charset_greek) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5710 return GREEK_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5711 if (w32_charset == Qw32_charset_hebrew) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5712 return HEBREW_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5713 if (w32_charset == Qw32_charset_thai) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5714 return THAI_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5715 if (w32_charset == Qw32_charset_mac) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5716 return MAC_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5717 #endif /* JOHAB_CHARSET */ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5718 #ifdef UNICODE_CHARSET |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5719 if (w32_charset == Qw32_charset_unicode) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5720 return UNICODE_CHARSET; |
24718
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
5721 #endif |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5722 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5723 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5724 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5725 return DEFAULT_CHARSET; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5726 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5727 |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5728 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5729 char * |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5730 w32_to_x_charset (fncharset) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5731 int fncharset; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5732 { |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5733 static char buf[16]; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5734 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5735 /* NTEMACS_TODO: use w32-charset-info-alist. Multiple matches |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5736 are possible, so this will require more than just a rewrite of |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5737 this function. w32_to_x_font is the only user of this function, |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5738 and that will require rewriting too, and its users. */ |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5739 switch (fncharset) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5740 { |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5741 /* ansi is considered iso8859-1, as most modern ansi fonts are. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5742 case ANSI_CHARSET: return "iso8859-1"; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5743 case DEFAULT_CHARSET: return "ascii-*"; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5744 case SYMBOL_CHARSET: return "ms-symbol"; |
24130
3a271e4c5332
(x_to_w32_charset): Add iso8859-9.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23950
diff
changeset
|
5745 case SHIFTJIS_CHARSET: return "jisx0208-sjis"; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5746 case HANGEUL_CHARSET: return "ksc5601.1987-*"; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5747 case GB2312_CHARSET: return "gb2312-*"; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5748 case CHINESEBIG5_CHARSET: return "big5-*"; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5749 case OEM_CHARSET: return "ms-oem"; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5750 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5751 /* More recent versions of Windows (95 and NT4.0) define more |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5752 character sets. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5753 #ifdef EASTEUROPE_CHARSET |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5754 case EASTEUROPE_CHARSET: return "iso8859-2"; |
24130
3a271e4c5332
(x_to_w32_charset): Add iso8859-9.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23950
diff
changeset
|
5755 case TURKISH_CHARSET: return "iso8859-9"; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5756 case BALTIC_CHARSET: return "iso8859-4"; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5757 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5758 /* W95 with international support but not IE4 often has the |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5759 KOI8-R codepage but not ISO8859-5. */ |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5760 case RUSSIAN_CHARSET: |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5761 if (!IsValidCodePage(28595) && IsValidCodePage(20886)) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5762 return "koi8-r"; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5763 else |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5764 return "iso8859-5"; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5765 case ARABIC_CHARSET: return "iso8859-6"; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5766 case GREEK_CHARSET: return "iso8859-7"; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5767 case HEBREW_CHARSET: return "iso8859-8"; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5768 case VIETNAMESE_CHARSET: return "viscii1.1-*"; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5769 case THAI_CHARSET: return "tis620-*"; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5770 case MAC_CHARSET: return "mac-*"; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5771 case JOHAB_CHARSET: return "ksc5601.1992-*"; |
24130
3a271e4c5332
(x_to_w32_charset): Add iso8859-9.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23950
diff
changeset
|
5772 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5773 #endif |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5774 |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5775 #ifdef UNICODE_CHARSET |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5776 case UNICODE_CHARSET: return "iso10646-unicode"; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5777 #endif |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5778 } |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5779 /* Encode numerical value of unknown charset. */ |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5780 sprintf (buf, "*-#%u", fncharset); |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
5781 return buf; |
13434 | 5782 } |
5783 | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5784 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5785 /* Get the Windows codepage corresponding to the specified font. The |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5786 charset info in the font name is used to look up |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5787 w32-charset-to-codepage-alist. */ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5788 int |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5789 w32_codepage_for_font (char *fontname) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5790 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5791 Lisp_Object codepage; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5792 char charset_str[20], *charset, *end; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5793 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5794 /* Extract charset part of font string. */ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5795 if (sscanf (fontname, |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5796 "-%*[^-]-%*[^-]-%*[^-]-%*[^-]-%*[^-]-%*[^-]-%*[^-]-%*[^-]-%*[^-]-%*[^-]-%*[^-]-%*[^-]-%19s", |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5797 charset_str) == EOF) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5798 return CP_DEFAULT; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5799 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5800 /* Remove leading "*-". */ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5801 if (strncmp ("*-", charset_str, 2) == 0) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5802 charset = charset_str + 2; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5803 else |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5804 charset = charset_str; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5805 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5806 /* Stop match at wildcard (including preceding '-'). */ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5807 if (end = strchr (charset, '*')) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5808 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5809 if (end > charset && *(end-1) == '-') |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5810 end--; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5811 *end = '\0'; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5812 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5813 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5814 codepage = Fcdr (Fcdr (Fassoc (build_string(charset), |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5815 Vw32_charset_info_alist))); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5816 if (INTEGERP (codepage)) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5817 return XINT (codepage); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5818 else |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5819 return CP_DEFAULT; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5820 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5821 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
5822 |
13434 | 5823 BOOL |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5824 w32_to_x_font (lplogfont, lpxstr, len) |
13434 | 5825 LOGFONT * lplogfont; |
5826 char * lpxstr; | |
5827 int len; | |
5828 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5829 char* fonttype; |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5830 char *fontname; |
15205
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5831 char height_pixels[8]; |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5832 char height_dpi[8]; |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5833 char width_pixels[8]; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5834 char *fontname_dash; |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
5835 int display_resy = one_w32_display_info.resy; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
5836 int display_resx = one_w32_display_info.resx; |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5837 int bufsz; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5838 struct coding_system coding; |
15205
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5839 |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5840 if (!lpxstr) abort (); |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5841 |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5842 if (!lplogfont) |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5843 return FALSE; |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5844 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5845 if (lplogfont->lfOutPrecision == OUT_STRING_PRECIS) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5846 fonttype = "raster"; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5847 else if (lplogfont->lfOutPrecision == OUT_STROKE_PRECIS) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5848 fonttype = "outline"; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5849 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5850 fonttype = "unknown"; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5851 |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5852 setup_coding_system (Fcheck_coding_system (Vw32_system_coding_system), |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5853 &coding); |
29021
be2769eac1a5
(w32_to_x_font): Setup members src_multibyte and
Kenichi Handa <handa@m17n.org>
parents:
28983
diff
changeset
|
5854 coding.src_multibyte = 0; |
be2769eac1a5
(w32_to_x_font): Setup members src_multibyte and
Kenichi Handa <handa@m17n.org>
parents:
28983
diff
changeset
|
5855 coding.dst_multibyte = 1; |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5856 coding.mode |= CODING_MODE_LAST_BLOCK; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5857 bufsz = decoding_buffer_size (&coding, LF_FACESIZE); |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5858 |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5859 fontname = alloca(sizeof(*fontname) * bufsz); |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5860 decode_coding (&coding, lplogfont->lfFaceName, fontname, |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5861 strlen(lplogfont->lfFaceName), bufsz - 1); |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5862 *(fontname + coding.produced) = '\0'; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5863 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5864 /* Replace dashes with underscores so the dashes are not |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5865 misinterpreted. */ |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5866 fontname_dash = fontname; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5867 while (fontname_dash = strchr (fontname_dash, '-')) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5868 *fontname_dash = '_'; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5869 |
15205
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5870 if (lplogfont->lfHeight) |
13434 | 5871 { |
15205
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5872 sprintf (height_pixels, "%u", abs (lplogfont->lfHeight)); |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5873 sprintf (height_dpi, "%u", |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5874 abs (lplogfont->lfHeight) * 720 / display_resy); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5875 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5876 else |
13434 | 5877 { |
15205
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5878 strcpy (height_pixels, "*"); |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5879 strcpy (height_dpi, "*"); |
13434 | 5880 } |
15205
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5881 if (lplogfont->lfWidth) |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5882 sprintf (width_pixels, "%u", lplogfont->lfWidth * 10); |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5883 else |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5884 strcpy (width_pixels, "*"); |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5885 |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5886 _snprintf (lpxstr, len - 1, |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5887 "-%s-%s-%s-%c-normal-normal-%s-%s-%d-%d-%c-%s-%s", |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5888 fonttype, /* foundry */ |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5889 fontname, /* family */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5890 w32_to_x_weight (lplogfont->lfWeight), /* weight */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5891 lplogfont->lfItalic?'i':'r', /* slant */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5892 /* setwidth name */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5893 /* add style name */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5894 height_pixels, /* pixel size */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5895 height_dpi, /* point size */ |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5896 display_resx, /* resx */ |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5897 display_resy, /* resy */ |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5898 ((lplogfont->lfPitchAndFamily & 0x3) == VARIABLE_PITCH) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5899 ? 'p' : 'c', /* spacing */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5900 width_pixels, /* avg width */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5901 w32_to_x_charset (lplogfont->lfCharSet) /* charset registry |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
5902 and encoding*/ |
15205
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5903 ); |
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
5904 |
13434 | 5905 lpxstr[len - 1] = 0; /* just to be sure */ |
5906 return (TRUE); | |
5907 } | |
5908 | |
5909 BOOL | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5910 x_to_w32_font (lpxstr, lplogfont) |
13434 | 5911 char * lpxstr; |
5912 LOGFONT * lplogfont; | |
5913 { | |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5914 struct coding_system coding; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5915 |
13434 | 5916 if (!lplogfont) return (FALSE); |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5917 |
13434 | 5918 memset (lplogfont, 0, sizeof (*lplogfont)); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5919 |
23620
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5920 /* Set default value for each field. */ |
15380
8b01836a6b06
(x_to_win32_font): Allow any quality fonts.
Richard M. Stallman <rms@gnu.org>
parents:
15377
diff
changeset
|
5921 #if 1 |
13434 | 5922 lplogfont->lfOutPrecision = OUT_DEFAULT_PRECIS; |
5923 lplogfont->lfClipPrecision = CLIP_DEFAULT_PRECIS; | |
5924 lplogfont->lfQuality = DEFAULT_QUALITY; | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5925 #else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5926 /* go for maximum quality */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5927 lplogfont->lfOutPrecision = OUT_STROKE_PRECIS; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5928 lplogfont->lfClipPrecision = CLIP_STROKE_PRECIS; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5929 lplogfont->lfQuality = PROOF_QUALITY; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5930 #endif |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5931 |
23620
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5932 lplogfont->lfCharSet = DEFAULT_CHARSET; |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5933 lplogfont->lfWeight = FW_DONTCARE; |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5934 lplogfont->lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE; |
2b55b8f8cdc1
(x_to_w32_font): Specify DEFAULT_CHARSET in the w32 LOGFONT struct if
Andrew Innes <andrewi@gnu.org>
parents:
23558
diff
changeset
|
5935 |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5936 if (!lpxstr) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5937 return FALSE; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5938 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5939 /* Provide a simple escape mechanism for specifying Windows font names |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5940 * directly -- if font spec does not beginning with '-', assume this |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5941 * format: |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5942 * "<font name>[:height in pixels[:width in pixels[:weight]]]" |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5943 */ |
13434 | 5944 |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5945 if (*lpxstr == '-') |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5946 { |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5947 int fields, tem; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5948 char name[50], weight[20], slant, pitch, pixels[10], height[10], |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5949 width[10], resy[10], remainder[20]; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5950 char * encoding; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5951 int dpi = one_w32_display_info.height_in; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5952 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5953 fields = sscanf (lpxstr, |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5954 "-%*[^-]-%49[^-]-%19[^-]-%c-%*[^-]-%*[^-]-%9[^-]-%9[^-]-%*[^-]-%9[^-]-%c-%9[^-]-%19s", |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
5955 name, weight, &slant, pixels, height, resy, &pitch, width, remainder); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5956 if (fields == EOF) return (FALSE); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5957 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5958 /* If wildcards cover more than one field, we don't know which |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5959 field is which, so don't fill any in. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5960 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5961 if (fields < 9) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5962 fields = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5963 |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5964 if (fields > 0 && name[0] != '*') |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5965 { |
24583
0e5c5bd9b99d
(x_to_w32_font): Provide sufficient buffer to encode_coding to avoid carryover.
Richard M. Stallman <rms@gnu.org>
parents:
24497
diff
changeset
|
5966 int bufsize; |
0e5c5bd9b99d
(x_to_w32_font): Provide sufficient buffer to encode_coding to avoid carryover.
Richard M. Stallman <rms@gnu.org>
parents:
24497
diff
changeset
|
5967 unsigned char *buf; |
0e5c5bd9b99d
(x_to_w32_font): Provide sufficient buffer to encode_coding to avoid carryover.
Richard M. Stallman <rms@gnu.org>
parents:
24497
diff
changeset
|
5968 |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5969 setup_coding_system |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5970 (Fcheck_coding_system (Vw32_system_coding_system), &coding); |
29021
be2769eac1a5
(w32_to_x_font): Setup members src_multibyte and
Kenichi Handa <handa@m17n.org>
parents:
28983
diff
changeset
|
5971 coding.src_multibyte = 1; |
be2769eac1a5
(w32_to_x_font): Setup members src_multibyte and
Kenichi Handa <handa@m17n.org>
parents:
28983
diff
changeset
|
5972 coding.dst_multibyte = 1; |
24583
0e5c5bd9b99d
(x_to_w32_font): Provide sufficient buffer to encode_coding to avoid carryover.
Richard M. Stallman <rms@gnu.org>
parents:
24497
diff
changeset
|
5973 bufsize = encoding_buffer_size (&coding, strlen (name)); |
0e5c5bd9b99d
(x_to_w32_font): Provide sufficient buffer to encode_coding to avoid carryover.
Richard M. Stallman <rms@gnu.org>
parents:
24497
diff
changeset
|
5974 buf = (unsigned char *) alloca (bufsize); |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
5975 coding.mode |= CODING_MODE_LAST_BLOCK; |
24583
0e5c5bd9b99d
(x_to_w32_font): Provide sufficient buffer to encode_coding to avoid carryover.
Richard M. Stallman <rms@gnu.org>
parents:
24497
diff
changeset
|
5976 encode_coding (&coding, name, buf, strlen (name), bufsize); |
0e5c5bd9b99d
(x_to_w32_font): Provide sufficient buffer to encode_coding to avoid carryover.
Richard M. Stallman <rms@gnu.org>
parents:
24497
diff
changeset
|
5977 if (coding.produced >= LF_FACESIZE) |
0e5c5bd9b99d
(x_to_w32_font): Provide sufficient buffer to encode_coding to avoid carryover.
Richard M. Stallman <rms@gnu.org>
parents:
24497
diff
changeset
|
5978 coding.produced = LF_FACESIZE - 1; |
0e5c5bd9b99d
(x_to_w32_font): Provide sufficient buffer to encode_coding to avoid carryover.
Richard M. Stallman <rms@gnu.org>
parents:
24497
diff
changeset
|
5979 buf[coding.produced] = 0; |
0e5c5bd9b99d
(x_to_w32_font): Provide sufficient buffer to encode_coding to avoid carryover.
Richard M. Stallman <rms@gnu.org>
parents:
24497
diff
changeset
|
5980 strcpy (lplogfont->lfFaceName, buf); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5981 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5982 else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5983 { |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5984 lplogfont->lfFaceName[0] = '\0'; |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5985 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5986 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5987 fields--; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5988 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
5989 lplogfont->lfWeight = x_to_w32_weight ((fields > 0 ? weight : "")); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5990 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5991 fields--; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5992 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
5993 if (!NILP (Vw32_enable_synthesized_fonts)) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5994 lplogfont->lfItalic = (fields > 0 && slant == 'i'); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5995 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5996 fields--; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5997 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5998 if (fields > 0 && pixels[0] != '*') |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
5999 lplogfont->lfHeight = atoi (pixels); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6000 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6001 fields--; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6002 fields--; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6003 if (fields > 0 && resy[0] != '*') |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6004 { |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6005 tem = atoi (resy); |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6006 if (tem > 0) dpi = tem; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6007 } |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6008 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6009 if (fields > -1 && lplogfont->lfHeight == 0 && height[0] != '*') |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6010 lplogfont->lfHeight = atoi (height) * dpi / 720; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6011 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6012 if (fields > 0) |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6013 lplogfont->lfPitchAndFamily = |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6014 (fields > 0 && pitch == 'p') ? VARIABLE_PITCH : FIXED_PITCH; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6015 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6016 fields--; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6017 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6018 if (fields > 0 && width[0] != '*') |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6019 lplogfont->lfWidth = atoi (width) / 10; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6020 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6021 fields--; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6022 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6023 /* Strip the trailing '-' if present. (it shouldn't be, as it |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6024 fails the test against xlfd-tight-regexp in fontset.el). */ |
14353 | 6025 { |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6026 int len = strlen (remainder); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6027 if (len > 0 && remainder[len-1] == '-') |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6028 remainder[len-1] = 0; |
13434 | 6029 } |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6030 encoding = remainder; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6031 if (strncmp (encoding, "*-", 2) == 0) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6032 encoding += 2; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6033 lplogfont->lfCharSet = x_to_w32_charset (fields > 0 ? encoding : ""); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6034 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6035 else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6036 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6037 int fields; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6038 char name[100], height[10], width[10], weight[20]; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6039 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6040 fields = sscanf (lpxstr, |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6041 "%99[^:]:%9[^:]:%9[^:]:%19s", |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6042 name, height, width, weight); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6043 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6044 if (fields == EOF) return (FALSE); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6045 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6046 if (fields > 0) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6047 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6048 strncpy (lplogfont->lfFaceName,name, LF_FACESIZE); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6049 lplogfont->lfFaceName[LF_FACESIZE-1] = 0; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6050 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6051 else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6052 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6053 lplogfont->lfFaceName[0] = 0; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6054 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6055 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6056 fields--; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6057 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6058 if (fields > 0) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6059 lplogfont->lfHeight = atoi (height); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6060 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6061 fields--; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6062 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6063 if (fields > 0) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6064 lplogfont->lfWidth = atoi (width); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6065 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6066 fields--; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6067 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6068 lplogfont->lfWeight = x_to_w32_weight ((fields > 0 ? weight : "")); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6069 } |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6070 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6071 /* This makes TrueType fonts work better. */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6072 lplogfont->lfHeight = - abs (lplogfont->lfHeight); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6073 |
13434 | 6074 return (TRUE); |
6075 } | |
6076 | |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6077 /* Strip the pixel height and point height from the given xlfd, and |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6078 return the pixel height. If no pixel height is specified, calculate |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6079 one from the point height, or if that isn't defined either, return |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6080 0 (which usually signifies a scalable font). |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6081 */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6082 int xlfd_strip_height (char *fontname) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6083 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6084 int pixel_height, point_height, dpi, field_number; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6085 char *read_from, *write_to; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6086 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6087 xassert (fontname); |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6088 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6089 pixel_height = field_number = 0; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6090 write_to = NULL; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6091 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6092 /* Look for height fields. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6093 for (read_from = fontname; *read_from; read_from++) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6094 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6095 if (*read_from == '-') |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6096 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6097 field_number++; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6098 if (field_number == 7) /* Pixel height. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6099 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6100 read_from++; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6101 write_to = read_from; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6102 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6103 /* Find end of field. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6104 for (;*read_from && *read_from != '-'; read_from++) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6105 ; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6106 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6107 /* Split the fontname at end of field. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6108 if (*read_from) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6109 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6110 *read_from = '\0'; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6111 read_from++; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6112 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6113 pixel_height = atoi (write_to); |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6114 /* Blank out field. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6115 if (read_from > write_to) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6116 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6117 *write_to = '-'; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6118 write_to++; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6119 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6120 /* If the pixel height field is at the end (partial xfld), |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6121 return now. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6122 else |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6123 return pixel_height; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6124 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6125 /* If we got a pixel height, the point height can be |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6126 ignored. Just blank it out and break now. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6127 if (pixel_height) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6128 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6129 /* Find end of point size field. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6130 for (; *read_from && *read_from != '-'; read_from++) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6131 ; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6132 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6133 if (*read_from) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6134 read_from++; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6135 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6136 /* Blank out the point size field. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6137 if (read_from > write_to) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6138 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6139 *write_to = '-'; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6140 write_to++; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6141 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6142 else |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6143 return pixel_height; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6144 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6145 break; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6146 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6147 /* If the point height is already blank, break now. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6148 if (*read_from == '-') |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6149 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6150 read_from++; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6151 break; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6152 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6153 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6154 else if (field_number == 8) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6155 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6156 /* If we didn't get a pixel height, try to get the point |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6157 height and convert that. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6158 int point_size; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6159 char *point_size_start = read_from++; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6160 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6161 /* Find end of field. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6162 for (; *read_from && *read_from != '-'; read_from++) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6163 ; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6164 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6165 if (*read_from) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6166 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6167 *read_from = '\0'; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6168 read_from++; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6169 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6170 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6171 point_size = atoi (point_size_start); |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6172 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6173 /* Convert to pixel height. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6174 pixel_height = point_size |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6175 * one_w32_display_info.height_in / 720; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6176 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6177 /* Blank out this field and break. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6178 *write_to = '-'; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6179 write_to++; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6180 break; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6181 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6182 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6183 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6184 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6185 /* Shift the rest of the font spec into place. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6186 if (write_to && read_from > write_to) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6187 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6188 for (; *read_from; read_from++, write_to++) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6189 *write_to = *read_from; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6190 *write_to = '\0'; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6191 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6192 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6193 return pixel_height; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6194 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6195 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6196 /* Assume parameter 1 is fully qualified, no wildcards. */ |
13434 | 6197 BOOL |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6198 w32_font_match (fontname, pattern) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6199 char * fontname; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6200 char * pattern; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6201 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6202 char *regex = alloca (strlen (pattern) * 2); |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6203 char *font_name_copy = alloca (strlen (fontname) + 1); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6204 char *ptr; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6205 |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6206 /* Copy fontname so we can modify it during comparison. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6207 strcpy (font_name_copy, fontname); |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6208 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6209 ptr = regex; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6210 *ptr++ = '^'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6211 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6212 /* Turn pattern into a regexp and do a regexp match. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6213 for (; *pattern; pattern++) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6214 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6215 if (*pattern == '?') |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6216 *ptr++ = '.'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6217 else if (*pattern == '*') |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6218 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6219 *ptr++ = '.'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6220 *ptr++ = '*'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6221 } |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6222 else |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6223 *ptr++ = *pattern; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6224 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6225 *ptr = '$'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6226 *(ptr + 1) = '\0'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6227 |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6228 /* Strip out font heights and compare them seperately, since |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6229 rounding error can cause mismatches. This also allows a |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6230 comparison between a font that declares only a pixel height and a |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6231 pattern that declares the point height. |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6232 */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6233 { |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6234 int font_height, pattern_height; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6235 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6236 font_height = xlfd_strip_height (font_name_copy); |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6237 pattern_height = xlfd_strip_height (regex); |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6238 |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6239 /* Compare now, and don't bother doing expensive regexp matching |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6240 if the heights differ. */ |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6241 if (font_height && pattern_height && (font_height != pattern_height)) |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6242 return FALSE; |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6243 } |
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6244 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6245 return (fast_c_string_match_ignore_case (build_string (regex), |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
6246 font_name_copy) >= 0); |
13434 | 6247 } |
6248 | |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6249 /* Callback functions, and a structure holding info they need, for |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6250 listing system fonts on W32. We need one set of functions to do the |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6251 job properly, but these don't work on NT 3.51 and earlier, so we |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6252 have a second set which don't handle character sets properly to |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6253 fall back on. |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6254 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6255 In both cases, there are two passes made. The first pass gets one |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6256 font from each family, the second pass lists all the fonts from |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6257 each family. */ |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6258 |
13434 | 6259 typedef struct enumfont_t |
6260 { | |
6261 HDC hdc; | |
6262 int numFonts; | |
15205
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
6263 LOGFONT logfont; |
13434 | 6264 XFontStruct *size_ref; |
6265 Lisp_Object *pattern; | |
6266 Lisp_Object *tail; | |
6267 } enumfont_t; | |
6268 | |
6269 int CALLBACK | |
6270 enum_font_cb2 (lplf, lptm, FontType, lpef) | |
6271 ENUMLOGFONT * lplf; | |
6272 NEWTEXTMETRIC * lptm; | |
6273 int FontType; | |
6274 enumfont_t * lpef; | |
6275 { | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
6276 if (lplf->elfLogFont.lfStrikeOut || lplf->elfLogFont.lfUnderline) |
13434 | 6277 return (1); |
6278 | |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6279 /* Check that the character set matches if it was specified */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6280 if (lpef->logfont.lfCharSet != DEFAULT_CHARSET && |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6281 lplf->elfLogFont.lfCharSet != lpef->logfont.lfCharSet) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6282 return (1); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6283 |
13434 | 6284 { |
6285 char buf[100]; | |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6286 Lisp_Object width = Qnil; |
13434 | 6287 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6288 /* Truetype fonts do not report their true metrics until loaded */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6289 if (FontType != RASTER_FONTTYPE) |
15205
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
6290 { |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6291 if (!NILP (*(lpef->pattern))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6292 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6293 /* Scalable fonts are as big as you want them to be. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6294 lplf->elfLogFont.lfHeight = lpef->logfont.lfHeight; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6295 lplf->elfLogFont.lfWidth = lpef->logfont.lfWidth; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6296 width = make_number (lpef->logfont.lfWidth); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6297 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6298 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6299 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6300 lplf->elfLogFont.lfHeight = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6301 lplf->elfLogFont.lfWidth = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6302 } |
15205
0f5d6cd72e21
(win_msg_worker): Use post_msg.
Richard M. Stallman <rms@gnu.org>
parents:
15148
diff
changeset
|
6303 } |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6304 |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
6305 /* Make sure the height used here is the same as everywhere |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
6306 else (ie character height, not cell height). */ |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6307 if (lplf->elfLogFont.lfHeight > 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6308 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6309 /* lptm can be trusted for RASTER fonts, but not scalable ones. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6310 if (FontType == RASTER_FONTTYPE) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6311 lplf->elfLogFont.lfHeight = lptm->tmInternalLeading - lptm->tmHeight; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6312 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6313 lplf->elfLogFont.lfHeight = -lplf->elfLogFont.lfHeight; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6314 } |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6315 |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6316 if (!w32_to_x_font (&(lplf->elfLogFont), buf, 100)) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6317 return (0); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6318 |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6319 if (NILP (*(lpef->pattern)) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6320 || w32_font_match (buf, XSTRING (*(lpef->pattern))->data)) |
13434 | 6321 { |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6322 *lpef->tail = Fcons (Fcons (build_string (buf), width), Qnil); |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6323 lpef->tail = &(XCDR (*lpef->tail)); |
13434 | 6324 lpef->numFonts++; |
6325 } | |
6326 } | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6327 |
13434 | 6328 return (1); |
6329 } | |
6330 | |
6331 int CALLBACK | |
6332 enum_font_cb1 (lplf, lptm, FontType, lpef) | |
6333 ENUMLOGFONT * lplf; | |
6334 NEWTEXTMETRIC * lptm; | |
6335 int FontType; | |
6336 enumfont_t * lpef; | |
6337 { | |
6338 return EnumFontFamilies (lpef->hdc, | |
6339 lplf->elfLogFont.lfFaceName, | |
6340 (FONTENUMPROC) enum_font_cb2, | |
6341 (LPARAM) lpef); | |
6342 } | |
6343 | |
6344 | |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6345 int CALLBACK |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6346 enum_fontex_cb2 (lplf, lptm, font_type, lpef) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6347 ENUMLOGFONTEX * lplf; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6348 NEWTEXTMETRICEX * lptm; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6349 int font_type; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6350 enumfont_t * lpef; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6351 { |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6352 /* We are not interested in the extra info we get back from the 'Ex |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6353 version - only the fact that we get character set variations |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6354 enumerated seperately. */ |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6355 return enum_font_cb2 ((ENUMLOGFONT *) lplf, (NEWTEXTMETRIC *) lptm, |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6356 font_type, lpef); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6357 } |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6358 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6359 int CALLBACK |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6360 enum_fontex_cb1 (lplf, lptm, font_type, lpef) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6361 ENUMLOGFONTEX * lplf; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6362 NEWTEXTMETRICEX * lptm; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6363 int font_type; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6364 enumfont_t * lpef; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6365 { |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6366 HMODULE gdi32 = GetModuleHandle ("gdi32.dll"); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6367 FARPROC enum_font_families_ex |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6368 = GetProcAddress ( gdi32, "EnumFontFamiliesExA"); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6369 /* We don't really expect EnumFontFamiliesEx to disappear once we |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6370 get here, so don't bother handling it gracefully. */ |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6371 if (enum_font_families_ex == NULL) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6372 error ("gdi32.dll has disappeared!"); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6373 return enum_font_families_ex (lpef->hdc, |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6374 &lplf->elfLogFont, |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6375 (FONTENUMPROC) enum_fontex_cb2, |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6376 (LPARAM) lpef, 0); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6377 } |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6378 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6379 /* Interface to fontset handler. (adapted from mw32font.c in Meadow |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6380 and xterm.c in Emacs 20.3) */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6381 |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6382 Lisp_Object w32_list_bdf_fonts (Lisp_Object pattern, int max_names) |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6383 { |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6384 char *fontname, *ptnstr; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6385 Lisp_Object list, tem, newlist = Qnil; |
24670 | 6386 int n_fonts = 0; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6387 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6388 list = Vw32_bdf_filename_alist; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6389 ptnstr = XSTRING (pattern)->data; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6390 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6391 for ( ; CONSP (list); list = XCDR (list)) |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6392 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6393 tem = XCAR (list); |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6394 if (CONSP (tem)) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6395 fontname = XSTRING (XCAR (tem))->data; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6396 else if (STRINGP (tem)) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6397 fontname = XSTRING (tem)->data; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6398 else |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6399 continue; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6400 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6401 if (w32_font_match (fontname, ptnstr)) |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6402 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6403 newlist = Fcons (XCAR (tem), newlist); |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6404 n_fonts++; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6405 if (n_fonts >= max_names) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6406 break; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6407 } |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6408 } |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6409 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6410 return newlist; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6411 } |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6412 |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6413 Lisp_Object w32_list_synthesized_fonts (FRAME_PTR f, Lisp_Object pattern, |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6414 int size, int max_names); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6415 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6416 /* Return a list of names of available fonts matching PATTERN on frame |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6417 F. If SIZE is not 0, it is the size (maximum bound width) of fonts |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6418 to be listed. Frame F NULL means we have not yet created any |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6419 frame, which means we can't get proper size info, as we don't have |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6420 a device context to use for GetTextMetrics. |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6421 MAXNAMES sets a limit on how many fonts to match. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6422 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6423 Lisp_Object |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6424 w32_list_fonts (FRAME_PTR f, Lisp_Object pattern, int size, int maxnames ) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6425 { |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6426 Lisp_Object patterns, key = Qnil, tem, tpat; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6427 Lisp_Object list = Qnil, newlist = Qnil, second_best = Qnil; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6428 struct w32_display_info *dpyinfo = &one_w32_display_info; |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6429 int n_fonts = 0; |
23637
54b22e0a1f7b
(w32_list_fonts): Report an error if a frame has not
Geoff Voelker <voelker@cs.washington.edu>
parents:
23620
diff
changeset
|
6430 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6431 patterns = Fassoc (pattern, Valternate_fontname_alist); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6432 if (NILP (patterns)) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6433 patterns = Fcons (pattern, Qnil); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6434 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6435 for (; CONSP (patterns); patterns = XCDR (patterns)) |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6436 { |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6437 enumfont_t ef; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6438 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6439 tpat = XCAR (patterns); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6440 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6441 /* See if we cached the result for this particular query. |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6442 The cache is an alist of the form: |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6443 ((PATTERN (FONTNAME . WIDTH) ...) ...) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6444 */ |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6445 if (tem = XCDR (dpyinfo->name_list_element), |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6446 !NILP (list = Fassoc (tpat, tem))) |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6447 { |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6448 list = Fcdr_safe (list); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6449 /* We have a cached list. Don't have to get the list again. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6450 goto label_cached; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6451 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6452 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6453 BLOCK_INPUT; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6454 /* At first, put PATTERN in the cache. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6455 list = Qnil; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6456 ef.pattern = &tpat; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6457 ef.tail = &list; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6458 ef.numFonts = 0; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6459 |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6460 /* Use EnumFontFamiliesEx where it is available, as it knows |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6461 about character sets. Fall back to EnumFontFamilies for |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6462 older versions of NT that don't support the 'Ex function. */ |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6463 x_to_w32_font (STRINGP (tpat) ? XSTRING (tpat)->data : |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6464 NULL, &ef.logfont); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6465 { |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6466 LOGFONT font_match_pattern; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6467 HMODULE gdi32 = GetModuleHandle ("gdi32.dll"); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6468 FARPROC enum_font_families_ex |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6469 = GetProcAddress ( gdi32, "EnumFontFamiliesExA"); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6470 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6471 /* We do our own pattern matching so we can handle wildcards. */ |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6472 font_match_pattern.lfFaceName[0] = 0; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6473 font_match_pattern.lfPitchAndFamily = 0; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6474 /* We can use the charset, because if it is a wildcard it will |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6475 be DEFAULT_CHARSET anyway. */ |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6476 font_match_pattern.lfCharSet = ef.logfont.lfCharSet; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6477 |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6478 ef.hdc = GetDC (dpyinfo->root_window); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6479 |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6480 if (enum_font_families_ex) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6481 enum_font_families_ex (ef.hdc, |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6482 &font_match_pattern, |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6483 (FONTENUMPROC) enum_fontex_cb1, |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6484 (LPARAM) &ef, 0); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6485 else |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6486 EnumFontFamilies (ef.hdc, NULL, (FONTENUMPROC) enum_font_cb1, |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6487 (LPARAM)&ef); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6488 |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6489 ReleaseDC (dpyinfo->root_window, ef.hdc); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6490 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6491 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6492 UNBLOCK_INPUT; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6493 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6494 /* Make a list of the fonts we got back. |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6495 Store that in the font cache for the display. */ |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6496 XCDR (dpyinfo->name_list_element) |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6497 = Fcons (Fcons (tpat, list), |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6498 XCDR (dpyinfo->name_list_element)); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6499 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6500 label_cached: |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6501 if (NILP (list)) continue; /* Try the remaining alternatives. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6502 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6503 newlist = second_best = Qnil; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6504 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6505 /* Make a list of the fonts that have the right width. */ |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6506 for (; CONSP (list); list = XCDR (list)) |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6507 { |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6508 int found_size; |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6509 tem = XCAR (list); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6510 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6511 if (!CONSP (tem)) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6512 continue; |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6513 if (NILP (XCAR (tem))) |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6514 continue; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6515 if (!size) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6516 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6517 newlist = Fcons (XCAR (tem), newlist); |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6518 n_fonts++; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6519 if (n_fonts >= maxnames) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6520 break; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6521 else |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6522 continue; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6523 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6524 if (!INTEGERP (XCDR (tem))) |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6525 { |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6526 /* Since we don't yet know the size of the font, we must |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6527 load it and try GetTextMetrics. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6528 W32FontStruct thisinfo; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6529 LOGFONT lf; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6530 HDC hdc; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6531 HANDLE oldobj; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6532 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6533 if (!x_to_w32_font (XSTRING (XCAR (tem))->data, &lf)) |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6534 continue; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6535 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6536 BLOCK_INPUT; |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6537 thisinfo.bdf = NULL; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6538 thisinfo.hfont = CreateFontIndirect (&lf); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6539 if (thisinfo.hfont == NULL) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6540 continue; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6541 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6542 hdc = GetDC (dpyinfo->root_window); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6543 oldobj = SelectObject (hdc, thisinfo.hfont); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6544 if (GetTextMetrics (hdc, &thisinfo.tm)) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6545 XCDR (tem) = make_number (FONT_WIDTH (&thisinfo)); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6546 else |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6547 XCDR (tem) = make_number (0); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6548 SelectObject (hdc, oldobj); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6549 ReleaseDC (dpyinfo->root_window, hdc); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6550 DeleteObject(thisinfo.hfont); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6551 UNBLOCK_INPUT; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6552 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6553 found_size = XINT (XCDR (tem)); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6554 if (found_size == size) |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6555 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6556 newlist = Fcons (XCAR (tem), newlist); |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6557 n_fonts++; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6558 if (n_fonts >= maxnames) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6559 break; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6560 } |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6561 /* keep track of the closest matching size in case |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6562 no exact match is found. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6563 else if (found_size > 0) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6564 { |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6565 if (NILP (second_best)) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6566 second_best = tem; |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6567 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6568 else if (found_size < size) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6569 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6570 if (XINT (XCDR (second_best)) > size |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6571 || XINT (XCDR (second_best)) < found_size) |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6572 second_best = tem; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6573 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6574 else |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6575 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6576 if (XINT (XCDR (second_best)) > size |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6577 && XINT (XCDR (second_best)) > |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6578 found_size) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6579 second_best = tem; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6580 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6581 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6582 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6583 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6584 if (!NILP (newlist)) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6585 break; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6586 else if (!NILP (second_best)) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6587 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6588 newlist = Fcons (XCAR (second_best), Qnil); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6589 break; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6590 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6591 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6592 |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6593 /* Include any bdf fonts. */ |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6594 if (n_fonts < maxnames) |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6595 { |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6596 Lisp_Object combined[2]; |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6597 combined[0] = w32_list_bdf_fonts (pattern, maxnames - n_fonts); |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6598 combined[1] = newlist; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6599 newlist = Fnconc(2, combined); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6600 } |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6601 |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6602 /* If we can't find a font that matches, check if Windows would be |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6603 able to synthesize it from a different style. */ |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6604 if (NILP (newlist) && !NILP (Vw32_enable_synthesized_fonts)) |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6605 newlist = w32_list_synthesized_fonts (f, pattern, size, maxnames); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6606 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6607 return newlist; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6608 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6609 |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6610 Lisp_Object |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6611 w32_list_synthesized_fonts (f, pattern, size, max_names) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6612 FRAME_PTR f; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6613 Lisp_Object pattern; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6614 int size; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6615 int max_names; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6616 { |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6617 int fields; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6618 char *full_pattn, *new_pattn, foundary[50], family[50], *pattn_part2; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6619 char style[20], slant; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6620 Lisp_Object matches, match, tem, synthed_matches = Qnil; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6621 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6622 full_pattn = XSTRING (pattern)->data; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6623 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6624 pattn_part2 = alloca (XSTRING (pattern)->size); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6625 /* Allow some space for wildcard expansion. */ |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6626 new_pattn = alloca (XSTRING (pattern)->size + 100); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6627 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6628 fields = sscanf (full_pattn, "-%49[^-]-%49[^-]-%19[^-]-%c-%s", |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6629 foundary, family, style, &slant, pattn_part2); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6630 if (fields == EOF || fields < 5) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6631 return Qnil; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6632 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6633 /* If the style and slant are wildcards already there is no point |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6634 checking again (and we don't want to keep recursing). */ |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6635 if (*style == '*' && slant == '*') |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6636 return Qnil; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6637 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6638 sprintf (new_pattn, "-%s-%s-*-*-%s", foundary, family, pattn_part2); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6639 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6640 matches = w32_list_fonts (f, build_string (new_pattn), size, max_names); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6641 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6642 for ( ; CONSP (matches); matches = XCDR (matches)) |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6643 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6644 tem = XCAR (matches); |
24214
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6645 if (!STRINGP (tem)) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6646 continue; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6647 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6648 full_pattn = XSTRING (tem)->data; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6649 fields = sscanf (full_pattn, "-%49[^-]-%49[^-]-%*[^-]-%*c-%s", |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6650 foundary, family, pattn_part2); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6651 if (fields == EOF || fields < 3) |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6652 continue; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6653 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6654 sprintf (new_pattn, "-%s-%s-%s-%c-%s", foundary, family, style, |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6655 slant, pattn_part2); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6656 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6657 synthed_matches = Fcons (build_string (new_pattn), |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6658 synthed_matches); |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6659 } |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6660 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6661 return synthed_matches; |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6662 } |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6663 |
4fb0bce809bc
(w32_load_system_font): Do not load unlisted fonts if
Geoff Voelker <voelker@cs.washington.edu>
parents:
24211
diff
changeset
|
6664 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6665 /* Return a pointer to struct font_info of font FONT_IDX of frame F. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6666 struct font_info * |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6667 w32_get_font_info (f, font_idx) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6668 FRAME_PTR f; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6669 int font_idx; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6670 { |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6671 return (FRAME_W32_FONT_TABLE (f) + font_idx); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6672 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6673 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6674 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6675 struct font_info* |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6676 w32_query_font (struct frame *f, char *fontname) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6677 { |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6678 int i; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6679 struct font_info *pfi; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6680 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6681 pfi = FRAME_W32_FONT_TABLE (f); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6682 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6683 for (i = 0; i < one_w32_display_info.n_fonts ;i++, pfi++) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6684 { |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6685 if (strcmp(pfi->name, fontname) == 0) return pfi; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6686 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6687 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6688 return NULL; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6689 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6690 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6691 /* Find a CCL program for a font specified by FONTP, and set the member |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6692 `encoder' of the structure. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6693 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6694 void |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6695 w32_find_ccl_program (fontp) |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6696 struct font_info *fontp; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6697 { |
25069
ee9bfbc340ba
(w32_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24856
diff
changeset
|
6698 Lisp_Object list, elt; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6699 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6700 for (list = Vfont_ccl_encoder_alist; CONSP (list); list = XCDR (list)) |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6701 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6702 elt = XCAR (list); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6703 if (CONSP (elt) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6704 && STRINGP (XCAR (elt)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6705 && (fast_c_string_match_ignore_case (XCAR (elt), fontp->name) |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6706 >= 0)) |
25069
ee9bfbc340ba
(w32_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24856
diff
changeset
|
6707 break; |
ee9bfbc340ba
(w32_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24856
diff
changeset
|
6708 } |
ee9bfbc340ba
(w32_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24856
diff
changeset
|
6709 if (! NILP (list)) |
ee9bfbc340ba
(w32_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24856
diff
changeset
|
6710 { |
25084
d89aa269255d
(w32_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents:
25069
diff
changeset
|
6711 struct ccl_program *ccl |
d89aa269255d
(w32_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents:
25069
diff
changeset
|
6712 = (struct ccl_program *) xmalloc (sizeof (struct ccl_program)); |
25069
ee9bfbc340ba
(w32_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24856
diff
changeset
|
6713 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6714 if (setup_ccl_program (ccl, XCDR (elt)) < 0) |
25069
ee9bfbc340ba
(w32_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24856
diff
changeset
|
6715 xfree (ccl); |
ee9bfbc340ba
(w32_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24856
diff
changeset
|
6716 else |
ee9bfbc340ba
(w32_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24856
diff
changeset
|
6717 fontp->font_encoder = ccl; |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6718 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6719 } |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6720 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
6721 |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6722 DEFUN ("w32-find-bdf-fonts", Fw32_find_bdf_fonts, Sw32_find_bdf_fonts, |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6723 1, 1, 0, |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6724 "Return a list of BDF fonts in DIR, suitable for appending to\n\ |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6725 w32-bdf-filename-alist. Fonts which do not contain an xfld description\n\ |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6726 will not be included in the list. DIR may be a list of directories.") |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6727 (directory) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6728 Lisp_Object directory; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6729 { |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6730 Lisp_Object list = Qnil; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6731 struct gcpro gcpro1, gcpro2; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6732 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6733 if (!CONSP (directory)) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6734 return w32_find_bdf_fonts_in_dir (directory); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6735 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6736 for ( ; CONSP (directory); directory = XCDR (directory)) |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6737 { |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6738 Lisp_Object pair[2]; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6739 pair[0] = list; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6740 pair[1] = Qnil; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6741 GCPRO2 (directory, list); |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6742 pair[1] = w32_find_bdf_fonts_in_dir( XCAR (directory) ); |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6743 list = Fnconc( 2, pair ); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6744 UNGCPRO; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6745 } |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6746 return list; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6747 } |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6748 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6749 /* Find BDF files in a specified directory. (use GCPRO when calling, |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6750 as this calls lisp to get a directory listing). */ |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6751 Lisp_Object w32_find_bdf_fonts_in_dir( Lisp_Object directory ) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6752 { |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6753 Lisp_Object filelist, list = Qnil; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6754 char fontname[100]; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6755 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6756 if (!STRINGP(directory)) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6757 return Qnil; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6758 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6759 filelist = Fdirectory_files (directory, Qt, |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6760 build_string (".*\\.[bB][dD][fF]"), Qt); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6761 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6762 for ( ; CONSP(filelist); filelist = XCDR (filelist)) |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6763 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
6764 Lisp_Object filename = XCAR (filelist); |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6765 if (w32_BDF_to_x_font (XSTRING (filename)->data, fontname, 100)) |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6766 store_in_alist (&list, build_string (fontname), filename); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6767 } |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6768 return list; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6769 } |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6770 |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
6771 |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
25646
diff
changeset
|
6772 DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0, |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
6773 "Internal function called by `color-defined-p', which see.") |
13434 | 6774 (color, frame) |
6775 Lisp_Object color, frame; | |
6776 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6777 XColor foo; |
13434 | 6778 FRAME_PTR f = check_x_frame (frame); |
6779 | |
6780 CHECK_STRING (color, 1); | |
6781 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6782 if (w32_defined_color (f, XSTRING (color)->data, &foo, 0)) |
13434 | 6783 return Qt; |
6784 else | |
6785 return Qnil; | |
6786 } | |
6787 | |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
25646
diff
changeset
|
6788 DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0, |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
6789 "Internal function called by `color-values', which see.") |
13434 | 6790 (color, frame) |
6791 Lisp_Object color, frame; | |
6792 { | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6793 XColor foo; |
13434 | 6794 FRAME_PTR f = check_x_frame (frame); |
6795 | |
6796 CHECK_STRING (color, 1); | |
6797 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6798 if (w32_defined_color (f, XSTRING (color)->data, &foo, 0)) |
13434 | 6799 { |
6800 Lisp_Object rgb[3]; | |
6801 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6802 rgb[0] = make_number ((GetRValue (foo.pixel) << 8) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6803 | GetRValue (foo.pixel)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6804 rgb[1] = make_number ((GetGValue (foo.pixel) << 8) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6805 | GetGValue (foo.pixel)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6806 rgb[2] = make_number ((GetBValue (foo.pixel) << 8) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
6807 | GetBValue (foo.pixel)); |
13434 | 6808 return Flist (3, rgb); |
6809 } | |
6810 else | |
6811 return Qnil; | |
6812 } | |
6813 | |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
25646
diff
changeset
|
6814 DEFUN ("xw-display-color-p", Fxw_display_color_p, Sxw_display_color_p, 0, 1, 0, |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
6815 "Internal function called by `display-color-p', which see.") |
13434 | 6816 (display) |
6817 Lisp_Object display; | |
6818 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6819 struct w32_display_info *dpyinfo = check_x_display_info (display); |
13434 | 6820 |
6821 if ((dpyinfo->n_planes * dpyinfo->n_cbits) <= 2) | |
6822 return Qnil; | |
6823 | |
6824 return Qt; | |
6825 } | |
6826 | |
6827 DEFUN ("x-display-grayscale-p", Fx_display_grayscale_p, Sx_display_grayscale_p, | |
6828 0, 1, 0, | |
6829 "Return t if the X display supports shades of gray.\n\ | |
6830 Note that color displays do support shades of gray.\n\ | |
6831 The optional argument DISPLAY specifies which display to ask about.\n\ | |
6832 DISPLAY should be either a frame or a display name (a string).\n\ | |
6833 If omitted or nil, that stands for the selected frame's display.") | |
6834 (display) | |
6835 Lisp_Object display; | |
6836 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6837 struct w32_display_info *dpyinfo = check_x_display_info (display); |
13434 | 6838 |
6839 if ((dpyinfo->n_planes * dpyinfo->n_cbits) <= 1) | |
6840 return Qnil; | |
6841 | |
6842 return Qt; | |
6843 } | |
6844 | |
6845 DEFUN ("x-display-pixel-width", Fx_display_pixel_width, Sx_display_pixel_width, | |
6846 0, 1, 0, | |
6847 "Returns the width in pixels of the X display DISPLAY.\n\ | |
6848 The optional argument DISPLAY specifies which display to ask about.\n\ | |
6849 DISPLAY should be either a frame or a display name (a string).\n\ | |
6850 If omitted or nil, that stands for the selected frame's display.") | |
6851 (display) | |
6852 Lisp_Object display; | |
6853 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6854 struct w32_display_info *dpyinfo = check_x_display_info (display); |
13434 | 6855 |
6856 return make_number (dpyinfo->width); | |
6857 } | |
6858 | |
6859 DEFUN ("x-display-pixel-height", Fx_display_pixel_height, | |
6860 Sx_display_pixel_height, 0, 1, 0, | |
6861 "Returns the height in pixels of the X display DISPLAY.\n\ | |
6862 The optional argument DISPLAY specifies which display to ask about.\n\ | |
6863 DISPLAY should be either a frame or a display name (a string).\n\ | |
6864 If omitted or nil, that stands for the selected frame's display.") | |
6865 (display) | |
6866 Lisp_Object display; | |
6867 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6868 struct w32_display_info *dpyinfo = check_x_display_info (display); |
13434 | 6869 |
6870 return make_number (dpyinfo->height); | |
6871 } | |
6872 | |
6873 DEFUN ("x-display-planes", Fx_display_planes, Sx_display_planes, | |
6874 0, 1, 0, | |
6875 "Returns the number of bitplanes of the display DISPLAY.\n\ | |
6876 The optional argument DISPLAY specifies which display to ask about.\n\ | |
6877 DISPLAY should be either a frame or a display name (a string).\n\ | |
6878 If omitted or nil, that stands for the selected frame's display.") | |
6879 (display) | |
6880 Lisp_Object display; | |
6881 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6882 struct w32_display_info *dpyinfo = check_x_display_info (display); |
13434 | 6883 |
6884 return make_number (dpyinfo->n_planes * dpyinfo->n_cbits); | |
6885 } | |
6886 | |
6887 DEFUN ("x-display-color-cells", Fx_display_color_cells, Sx_display_color_cells, | |
6888 0, 1, 0, | |
6889 "Returns the number of color cells of the display DISPLAY.\n\ | |
6890 The optional argument DISPLAY specifies which display to ask about.\n\ | |
6891 DISPLAY should be either a frame or a display name (a string).\n\ | |
6892 If omitted or nil, that stands for the selected frame's display.") | |
6893 (display) | |
6894 Lisp_Object display; | |
6895 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6896 struct w32_display_info *dpyinfo = check_x_display_info (display); |
13434 | 6897 HDC hdc; |
6898 int cap; | |
6899 | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6900 hdc = GetDC (dpyinfo->root_window); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6901 if (dpyinfo->has_palette) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6902 cap = GetDeviceCaps (hdc,SIZEPALETTE); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6903 else |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6904 cap = GetDeviceCaps (hdc,NUMCOLORS); |
13434 | 6905 |
6906 ReleaseDC (dpyinfo->root_window, hdc); | |
6907 | |
6908 return make_number (cap); | |
6909 } | |
6910 | |
6911 DEFUN ("x-server-max-request-size", Fx_server_max_request_size, | |
6912 Sx_server_max_request_size, | |
6913 0, 1, 0, | |
6914 "Returns the maximum request size of the server of display DISPLAY.\n\ | |
6915 The optional argument DISPLAY specifies which display to ask about.\n\ | |
6916 DISPLAY should be either a frame or a display name (a string).\n\ | |
6917 If omitted or nil, that stands for the selected frame's display.") | |
6918 (display) | |
6919 Lisp_Object display; | |
6920 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6921 struct w32_display_info *dpyinfo = check_x_display_info (display); |
13434 | 6922 |
6923 return make_number (1); | |
6924 } | |
6925 | |
6926 DEFUN ("x-server-vendor", Fx_server_vendor, Sx_server_vendor, 0, 1, 0, | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6927 "Returns the vendor ID string of the W32 system (Microsoft).\n\ |
13434 | 6928 The optional argument DISPLAY specifies which display to ask about.\n\ |
6929 DISPLAY should be either a frame or a display name (a string).\n\ | |
6930 If omitted or nil, that stands for the selected frame's display.") | |
6931 (display) | |
6932 Lisp_Object display; | |
6933 { | |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
6934 return build_string ("Microsoft Corp."); |
13434 | 6935 } |
6936 | |
6937 DEFUN ("x-server-version", Fx_server_version, Sx_server_version, 0, 1, 0, | |
6938 "Returns the version numbers of the server of display DISPLAY.\n\ | |
6939 The value is a list of three integers: the major and minor\n\ | |
6940 version numbers, and the vendor-specific release\n\ | |
6941 number. See also the function `x-server-vendor'.\n\n\ | |
6942 The optional argument DISPLAY specifies which display to ask about.\n\ | |
6943 DISPLAY should be either a frame or a display name (a string).\n\ | |
6944 If omitted or nil, that stands for the selected frame's display.") | |
6945 (display) | |
6946 Lisp_Object display; | |
6947 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6948 return Fcons (make_number (w32_major_version), |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6949 Fcons (make_number (w32_minor_version), Qnil)); |
13434 | 6950 } |
6951 | |
6952 DEFUN ("x-display-screens", Fx_display_screens, Sx_display_screens, 0, 1, 0, | |
6953 "Returns the number of screens on the server of display DISPLAY.\n\ | |
6954 The optional argument DISPLAY specifies which display to ask about.\n\ | |
6955 DISPLAY should be either a frame or a display name (a string).\n\ | |
6956 If omitted or nil, that stands for the selected frame's display.") | |
6957 (display) | |
6958 Lisp_Object display; | |
6959 { | |
6960 return make_number (1); | |
6961 } | |
6962 | |
6963 DEFUN ("x-display-mm-height", Fx_display_mm_height, Sx_display_mm_height, 0, 1, 0, | |
6964 "Returns the height in millimeters of the X display DISPLAY.\n\ | |
6965 The optional argument DISPLAY specifies which display to ask about.\n\ | |
6966 DISPLAY should be either a frame or a display name (a string).\n\ | |
6967 If omitted or nil, that stands for the selected frame's display.") | |
6968 (display) | |
6969 Lisp_Object display; | |
6970 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6971 struct w32_display_info *dpyinfo = check_x_display_info (display); |
13434 | 6972 HDC hdc; |
6973 int cap; | |
6974 | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6975 hdc = GetDC (dpyinfo->root_window); |
14353 | 6976 |
13434 | 6977 cap = GetDeviceCaps (hdc, VERTSIZE); |
14353 | 6978 |
13434 | 6979 ReleaseDC (dpyinfo->root_window, hdc); |
6980 | |
6981 return make_number (cap); | |
6982 } | |
6983 | |
6984 DEFUN ("x-display-mm-width", Fx_display_mm_width, Sx_display_mm_width, 0, 1, 0, | |
6985 "Returns the width in millimeters of the X display DISPLAY.\n\ | |
6986 The optional argument DISPLAY specifies which display to ask about.\n\ | |
6987 DISPLAY should be either a frame or a display name (a string).\n\ | |
6988 If omitted or nil, that stands for the selected frame's display.") | |
6989 (display) | |
6990 Lisp_Object display; | |
6991 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
6992 struct w32_display_info *dpyinfo = check_x_display_info (display); |
13434 | 6993 |
6994 HDC hdc; | |
6995 int cap; | |
6996 | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
6997 hdc = GetDC (dpyinfo->root_window); |
14353 | 6998 |
13434 | 6999 cap = GetDeviceCaps (hdc, HORZSIZE); |
14353 | 7000 |
13434 | 7001 ReleaseDC (dpyinfo->root_window, hdc); |
7002 | |
7003 return make_number (cap); | |
7004 } | |
7005 | |
7006 DEFUN ("x-display-backing-store", Fx_display_backing_store, | |
7007 Sx_display_backing_store, 0, 1, 0, | |
7008 "Returns an indication of whether display DISPLAY does backing store.\n\ | |
7009 The value may be `always', `when-mapped', or `not-useful'.\n\ | |
7010 The optional argument DISPLAY specifies which display to ask about.\n\ | |
7011 DISPLAY should be either a frame or a display name (a string).\n\ | |
7012 If omitted or nil, that stands for the selected frame's display.") | |
7013 (display) | |
7014 Lisp_Object display; | |
7015 { | |
7016 return intern ("not-useful"); | |
7017 } | |
7018 | |
7019 DEFUN ("x-display-visual-class", Fx_display_visual_class, | |
7020 Sx_display_visual_class, 0, 1, 0, | |
7021 "Returns the visual class of the display DISPLAY.\n\ | |
7022 The value is one of the symbols `static-gray', `gray-scale',\n\ | |
7023 `static-color', `pseudo-color', `true-color', or `direct-color'.\n\n\ | |
7024 The optional argument DISPLAY specifies which display to ask about.\n\ | |
7025 DISPLAY should be either a frame or a display name (a string).\n\ | |
7026 If omitted or nil, that stands for the selected frame's display.") | |
7027 (display) | |
7028 Lisp_Object display; | |
7029 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7030 struct w32_display_info *dpyinfo = check_x_display_info (display); |
13434 | 7031 |
7032 #if 0 | |
7033 switch (dpyinfo->visual->class) | |
7034 { | |
7035 case StaticGray: return (intern ("static-gray")); | |
7036 case GrayScale: return (intern ("gray-scale")); | |
7037 case StaticColor: return (intern ("static-color")); | |
7038 case PseudoColor: return (intern ("pseudo-color")); | |
7039 case TrueColor: return (intern ("true-color")); | |
7040 case DirectColor: return (intern ("direct-color")); | |
7041 default: | |
7042 error ("Display has an unknown visual class"); | |
7043 } | |
7044 #endif | |
7045 | |
7046 error ("Display has an unknown visual class"); | |
7047 } | |
7048 | |
7049 DEFUN ("x-display-save-under", Fx_display_save_under, | |
7050 Sx_display_save_under, 0, 1, 0, | |
7051 "Returns t if the display DISPLAY supports the save-under feature.\n\ | |
7052 The optional argument DISPLAY specifies which display to ask about.\n\ | |
7053 DISPLAY should be either a frame or a display name (a string).\n\ | |
7054 If omitted or nil, that stands for the selected frame's display.") | |
7055 (display) | |
7056 Lisp_Object display; | |
7057 { | |
7058 return Qnil; | |
7059 } | |
7060 | |
7061 int | |
7062 x_pixel_width (f) | |
7063 register struct frame *f; | |
7064 { | |
7065 return PIXEL_WIDTH (f); | |
7066 } | |
7067 | |
7068 int | |
7069 x_pixel_height (f) | |
7070 register struct frame *f; | |
7071 { | |
7072 return PIXEL_HEIGHT (f); | |
7073 } | |
7074 | |
7075 int | |
7076 x_char_width (f) | |
7077 register struct frame *f; | |
7078 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7079 return FONT_WIDTH (f->output_data.w32->font); |
13434 | 7080 } |
7081 | |
7082 int | |
7083 x_char_height (f) | |
7084 register struct frame *f; | |
7085 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7086 return f->output_data.w32->line_height; |
13434 | 7087 } |
7088 | |
7089 int | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7090 x_screen_planes (f) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7091 register struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7092 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7093 return FRAME_W32_DISPLAY_INFO (f)->n_planes; |
13434 | 7094 } |
7095 | |
7096 /* Return the display structure for the display named NAME. | |
7097 Open a new connection if necessary. */ | |
7098 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7099 struct w32_display_info * |
13434 | 7100 x_display_info_for_name (name) |
7101 Lisp_Object name; | |
7102 { | |
7103 Lisp_Object names; | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7104 struct w32_display_info *dpyinfo; |
13434 | 7105 |
7106 CHECK_STRING (name, 0); | |
7107 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7108 for (dpyinfo = &one_w32_display_info, names = w32_display_name_list; |
13434 | 7109 dpyinfo; |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
7110 dpyinfo = dpyinfo->next, names = XCDR (names)) |
13434 | 7111 { |
7112 Lisp_Object tem; | |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
7113 tem = Fstring_equal (XCAR (XCAR (names)), name); |
13434 | 7114 if (!NILP (tem)) |
7115 return dpyinfo; | |
7116 } | |
7117 | |
7118 /* Use this general default value to start with. */ | |
7119 Vx_resource_name = Vinvocation_name; | |
7120 | |
7121 validate_x_resource_name (); | |
7122 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7123 dpyinfo = w32_term_init (name, (unsigned char *)0, |
13434 | 7124 (char *) XSTRING (Vx_resource_name)->data); |
7125 | |
7126 if (dpyinfo == 0) | |
7127 error ("Cannot connect to server %s", XSTRING (name)->data); | |
7128 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
7129 w32_in_use = 1; |
13434 | 7130 XSETFASTINT (Vwindow_system_version, 3); |
7131 | |
7132 return dpyinfo; | |
7133 } | |
7134 | |
7135 DEFUN ("x-open-connection", Fx_open_connection, Sx_open_connection, | |
7136 1, 3, 0, "Open a connection to a server.\n\ | |
7137 DISPLAY is the name of the display to connect to.\n\ | |
7138 Optional second arg XRM-STRING is a string of resources in xrdb format.\n\ | |
7139 If the optional third arg MUST-SUCCEED is non-nil,\n\ | |
7140 terminate Emacs if we can't open the connection.") | |
7141 (display, xrm_string, must_succeed) | |
7142 Lisp_Object display, xrm_string, must_succeed; | |
7143 { | |
7144 unsigned char *xrm_option; | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7145 struct w32_display_info *dpyinfo; |
13434 | 7146 |
7147 CHECK_STRING (display, 0); | |
7148 if (! NILP (xrm_string)) | |
7149 CHECK_STRING (xrm_string, 1); | |
7150 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
7151 if (! EQ (Vwindow_system, intern ("w32"))) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
7152 error ("Not using Microsoft Windows"); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
7153 |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7154 /* Allow color mapping to be defined externally; first look in user's |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7155 HOME directory, then in Emacs etc dir for a file called rgb.txt. */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7156 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7157 Lisp_Object color_file; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7158 struct gcpro gcpro1; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7159 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7160 color_file = build_string("~/rgb.txt"); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7161 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7162 GCPRO1 (color_file); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7163 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7164 if (NILP (Ffile_readable_p (color_file))) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7165 color_file = |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7166 Fexpand_file_name (build_string ("rgb.txt"), |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7167 Fsymbol_value (intern ("data-directory"))); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7168 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7169 Vw32_color_map = Fw32_load_color_file (color_file); |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7170 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7171 UNGCPRO; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7172 } |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7173 if (NILP (Vw32_color_map)) |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7174 Vw32_color_map = Fw32_default_color_map (); |
13434 | 7175 |
7176 if (! NILP (xrm_string)) | |
7177 xrm_option = (unsigned char *) XSTRING (xrm_string)->data; | |
7178 else | |
7179 xrm_option = (unsigned char *) 0; | |
7180 | |
7181 /* Use this general default value to start with. */ | |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7182 /* First remove .exe suffix from invocation-name - it looks ugly. */ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7183 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7184 char basename[ MAX_PATH ], *str; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7185 |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7186 strcpy (basename, XSTRING (Vinvocation_name)->data); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7187 str = strrchr (basename, '.'); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7188 if (str) *str = 0; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7189 Vinvocation_name = build_string (basename); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
7190 } |
13434 | 7191 Vx_resource_name = Vinvocation_name; |
7192 | |
7193 validate_x_resource_name (); | |
7194 | |
7195 /* This is what opens the connection and sets x_current_display. | |
7196 This also initializes many symbols, such as those used for input. */ | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7197 dpyinfo = w32_term_init (display, xrm_option, |
13434 | 7198 (char *) XSTRING (Vx_resource_name)->data); |
7199 | |
7200 if (dpyinfo == 0) | |
7201 { | |
7202 if (!NILP (must_succeed)) | |
14353 | 7203 fatal ("Cannot connect to server %s.\n", |
7204 XSTRING (display)->data); | |
13434 | 7205 else |
7206 error ("Cannot connect to server %s", XSTRING (display)->data); | |
7207 } | |
7208 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
7209 w32_in_use = 1; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
7210 |
13434 | 7211 XSETFASTINT (Vwindow_system_version, 3); |
7212 return Qnil; | |
7213 } | |
7214 | |
7215 DEFUN ("x-close-connection", Fx_close_connection, | |
7216 Sx_close_connection, 1, 1, 0, | |
7217 "Close the connection to DISPLAY's server.\n\ | |
7218 For DISPLAY, specify either a frame or a display name (a string).\n\ | |
7219 If DISPLAY is nil, that stands for the selected frame's display.") | |
7220 (display) | |
7221 Lisp_Object display; | |
7222 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7223 struct w32_display_info *dpyinfo = check_x_display_info (display); |
13434 | 7224 int i; |
7225 | |
7226 if (dpyinfo->reference_count > 0) | |
7227 error ("Display still has frames on it"); | |
7228 | |
7229 BLOCK_INPUT; | |
7230 /* Free the fonts in the font table. */ | |
7231 for (i = 0; i < dpyinfo->n_fonts; i++) | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7232 if (dpyinfo->font_table[i].name) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7233 { |
28272
f62bb21d38db
(w32_wnd_proc): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27936
diff
changeset
|
7234 if (dpyinfo->font_table[i].name != dpyinfo->font_table[i].full_name) |
f62bb21d38db
(w32_wnd_proc): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27936
diff
changeset
|
7235 xfree (dpyinfo->font_table[i].full_name); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7236 xfree (dpyinfo->font_table[i].name); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7237 w32_unload_font (dpyinfo, dpyinfo->font_table[i].font); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7238 } |
13434 | 7239 x_destroy_all_bitmaps (dpyinfo); |
7240 | |
7241 x_delete_display (dpyinfo); | |
7242 UNBLOCK_INPUT; | |
7243 | |
7244 return Qnil; | |
7245 } | |
7246 | |
7247 DEFUN ("x-display-list", Fx_display_list, Sx_display_list, 0, 0, 0, | |
7248 "Return the list of display names that Emacs has connections to.") | |
7249 () | |
7250 { | |
7251 Lisp_Object tail, result; | |
7252 | |
7253 result = Qnil; | |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
7254 for (tail = w32_display_name_list; ! NILP (tail); tail = XCDR (tail)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25289
diff
changeset
|
7255 result = Fcons (XCAR (XCAR (tail)), result); |
13434 | 7256 |
7257 return result; | |
7258 } | |
7259 | |
7260 DEFUN ("x-synchronize", Fx_synchronize, Sx_synchronize, 1, 2, 0, | |
7261 "If ON is non-nil, report errors as soon as the erring request is made.\n\ | |
7262 If ON is nil, allow buffering of requests.\n\ | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
7263 This is a noop on W32 systems.\n\ |
13434 | 7264 The optional second argument DISPLAY specifies which display to act on.\n\ |
7265 DISPLAY should be either a frame or a display name (a string).\n\ | |
7266 If DISPLAY is omitted or nil, that stands for the selected frame's display.") | |
7267 (on, display) | |
7268 Lisp_Object display, on; | |
7269 { | |
7270 return Qnil; | |
7271 } | |
7272 | |
7273 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7274 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7275 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7276 Image types |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7277 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7278 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7279 /* Value is the number of elements of vector VECTOR. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7280 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7281 #define DIM(VECTOR) (sizeof (VECTOR) / sizeof *(VECTOR)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7282 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7283 /* List of supported image types. Use define_image_type to add new |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7284 types. Use lookup_image_type to find a type for a given symbol. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7285 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7286 static struct image_type *image_types; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7287 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7288 /* The symbol `image' which is the car of the lists used to represent |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7289 images in Lisp. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7290 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7291 extern Lisp_Object Qimage; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7292 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7293 /* The symbol `xbm' which is used as the type symbol for XBM images. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7294 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7295 Lisp_Object Qxbm; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7296 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7297 /* Keywords. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7298 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7299 extern Lisp_Object QCwidth, QCheight, QCforeground, QCbackground, QCfile; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7300 extern Lisp_Object QCdata; |
28272
f62bb21d38db
(w32_wnd_proc): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27936
diff
changeset
|
7301 Lisp_Object QCtype, QCascent, QCmargin, QCrelief; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7302 Lisp_Object QCalgorithm, QCcolor_symbols, QCheuristic_mask; |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7303 Lisp_Object QCindex; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7304 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7305 /* Other symbols. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7306 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7307 Lisp_Object Qlaplace; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7308 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7309 /* Time in seconds after which images should be removed from the cache |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7310 if not displayed. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7311 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7312 Lisp_Object Vimage_cache_eviction_delay; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7313 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7314 /* Function prototypes. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7315 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7316 static void define_image_type P_ ((struct image_type *type)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7317 static struct image_type *lookup_image_type P_ ((Lisp_Object symbol)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7318 static void image_error P_ ((char *format, Lisp_Object, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7319 static void x_laplace P_ ((struct frame *, struct image *)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7320 static int x_build_heuristic_mask P_ ((struct frame *, struct image *, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7321 Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7322 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7323 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7324 /* Define a new image type from TYPE. This adds a copy of TYPE to |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7325 image_types and adds the symbol *TYPE->type to Vimage_types. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7326 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7327 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7328 define_image_type (type) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7329 struct image_type *type; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7330 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7331 /* Make a copy of TYPE to avoid a bus error in a dumped Emacs. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7332 The initialized data segment is read-only. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7333 struct image_type *p = (struct image_type *) xmalloc (sizeof *p); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7334 bcopy (type, p, sizeof *p); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7335 p->next = image_types; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7336 image_types = p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7337 Vimage_types = Fcons (*p->type, Vimage_types); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7338 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7339 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7340 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7341 /* Look up image type SYMBOL, and return a pointer to its image_type |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7342 structure. Value is null if SYMBOL is not a known image type. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7343 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7344 static INLINE struct image_type * |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7345 lookup_image_type (symbol) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7346 Lisp_Object symbol; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7347 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7348 struct image_type *type; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7349 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7350 for (type = image_types; type; type = type->next) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7351 if (EQ (symbol, *type->type)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7352 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7353 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7354 return type; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7355 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7356 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7357 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7358 /* Value is non-zero if OBJECT is a valid Lisp image specification. A |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7359 valid image specification is a list whose car is the symbol |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7360 `image', and whose rest is a property list. The property list must |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7361 contain a value for key `:type'. That value must be the name of a |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7362 supported image type. The rest of the property list depends on the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7363 image type. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7364 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7365 int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7366 valid_image_p (object) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7367 Lisp_Object object; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7368 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7369 int valid_p = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7370 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7371 if (CONSP (object) && EQ (XCAR (object), Qimage)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7372 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7373 Lisp_Object symbol = Fplist_get (XCDR (object), QCtype); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7374 struct image_type *type = lookup_image_type (symbol); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7375 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7376 if (type) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7377 valid_p = type->valid_p (object); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7378 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7379 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7380 return valid_p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7381 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7382 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7383 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7384 /* Log error message with format string FORMAT and argument ARG. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7385 Signaling an error, e.g. when an image cannot be loaded, is not a |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7386 good idea because this would interrupt redisplay, and the error |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7387 message display would lead to another redisplay. This function |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7388 therefore simply displays a message. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7389 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7390 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7391 image_error (format, arg1, arg2) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7392 char *format; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7393 Lisp_Object arg1, arg2; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7394 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7395 add_to_log (format, arg1, arg2); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7396 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7397 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7398 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7399 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7400 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7401 Image specifications |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7402 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7403 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7404 enum image_value_type |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7405 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7406 IMAGE_DONT_CHECK_VALUE_TYPE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7407 IMAGE_STRING_VALUE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7408 IMAGE_SYMBOL_VALUE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7409 IMAGE_POSITIVE_INTEGER_VALUE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7410 IMAGE_NON_NEGATIVE_INTEGER_VALUE, |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7411 IMAGE_ASCENT_VALUE, |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7412 IMAGE_INTEGER_VALUE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7413 IMAGE_FUNCTION_VALUE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7414 IMAGE_NUMBER_VALUE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7415 IMAGE_BOOL_VALUE |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7416 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7417 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7418 /* Structure used when parsing image specifications. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7419 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7420 struct image_keyword |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7421 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7422 /* Name of keyword. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7423 char *name; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7424 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7425 /* The type of value allowed. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7426 enum image_value_type type; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7427 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7428 /* Non-zero means key must be present. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7429 int mandatory_p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7430 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7431 /* Used to recognize duplicate keywords in a property list. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7432 int count; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7433 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7434 /* The value that was found. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7435 Lisp_Object value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7436 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7437 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7438 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7439 static int parse_image_spec P_ ((Lisp_Object, struct image_keyword *, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7440 int, Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7441 static Lisp_Object image_spec_value P_ ((Lisp_Object, Lisp_Object, int *)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7442 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7443 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7444 /* Parse image spec SPEC according to KEYWORDS. A valid image spec |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7445 has the format (image KEYWORD VALUE ...). One of the keyword/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7446 value pairs must be `:type TYPE'. KEYWORDS is a vector of |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7447 image_keywords structures of size NKEYWORDS describing other |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7448 allowed keyword/value pairs. Value is non-zero if SPEC is valid. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7449 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7450 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7451 parse_image_spec (spec, keywords, nkeywords, type) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7452 Lisp_Object spec; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7453 struct image_keyword *keywords; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7454 int nkeywords; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7455 Lisp_Object type; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7456 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7457 int i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7458 Lisp_Object plist; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7459 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7460 if (!CONSP (spec) || !EQ (XCAR (spec), Qimage)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7461 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7462 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7463 plist = XCDR (spec); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7464 while (CONSP (plist)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7465 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7466 Lisp_Object key, value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7467 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7468 /* First element of a pair must be a symbol. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7469 key = XCAR (plist); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7470 plist = XCDR (plist); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7471 if (!SYMBOLP (key)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7472 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7473 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7474 /* There must follow a value. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7475 if (!CONSP (plist)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7476 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7477 value = XCAR (plist); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7478 plist = XCDR (plist); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7479 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7480 /* Find key in KEYWORDS. Error if not found. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7481 for (i = 0; i < nkeywords; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7482 if (strcmp (keywords[i].name, XSYMBOL (key)->name->data) == 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7483 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7484 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7485 if (i == nkeywords) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7486 continue; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7487 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7488 /* Record that we recognized the keyword. If a keywords |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7489 was found more than once, it's an error. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7490 keywords[i].value = value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7491 ++keywords[i].count; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7492 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7493 if (keywords[i].count > 1) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7494 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7495 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7496 /* Check type of value against allowed type. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7497 switch (keywords[i].type) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7498 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7499 case IMAGE_STRING_VALUE: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7500 if (!STRINGP (value)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7501 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7502 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7503 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7504 case IMAGE_SYMBOL_VALUE: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7505 if (!SYMBOLP (value)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7506 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7507 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7508 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7509 case IMAGE_POSITIVE_INTEGER_VALUE: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7510 if (!INTEGERP (value) || XINT (value) <= 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7511 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7512 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7513 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7514 case IMAGE_ASCENT_VALUE: |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7515 if (SYMBOLP (value) && EQ (value, Qcenter)) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7516 break; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7517 else if (INTEGERP (value) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7518 && XINT (value) >= 0 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7519 && XINT (value) <= 100) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7520 break; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7521 return 0; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7522 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7523 case IMAGE_NON_NEGATIVE_INTEGER_VALUE: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7524 if (!INTEGERP (value) || XINT (value) < 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7525 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7526 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7527 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7528 case IMAGE_DONT_CHECK_VALUE_TYPE: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7529 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7530 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7531 case IMAGE_FUNCTION_VALUE: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7532 value = indirect_function (value); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7533 if (SUBRP (value) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7534 || COMPILEDP (value) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7535 || (CONSP (value) && EQ (XCAR (value), Qlambda))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7536 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7537 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7538 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7539 case IMAGE_NUMBER_VALUE: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7540 if (!INTEGERP (value) && !FLOATP (value)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7541 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7542 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7543 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7544 case IMAGE_INTEGER_VALUE: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7545 if (!INTEGERP (value)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7546 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7547 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7548 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7549 case IMAGE_BOOL_VALUE: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7550 if (!NILP (value) && !EQ (value, Qt)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7551 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7552 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7553 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7554 default: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7555 abort (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7556 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7557 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7558 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7559 if (EQ (key, QCtype) && !EQ (type, value)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7560 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7561 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7562 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7563 /* Check that all mandatory fields are present. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7564 for (i = 0; i < nkeywords; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7565 if (keywords[i].mandatory_p && keywords[i].count == 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7566 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7567 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7568 return NILP (plist); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7569 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7570 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7571 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7572 /* Return the value of KEY in image specification SPEC. Value is nil |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7573 if KEY is not present in SPEC. if FOUND is not null, set *FOUND |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7574 to 1 if KEY was found in SPEC, set it to 0 otherwise. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7575 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7576 static Lisp_Object |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7577 image_spec_value (spec, key, found) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7578 Lisp_Object spec, key; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7579 int *found; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7580 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7581 Lisp_Object tail; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7582 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7583 xassert (valid_image_p (spec)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7584 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7585 for (tail = XCDR (spec); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7586 CONSP (tail) && CONSP (XCDR (tail)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7587 tail = XCDR (XCDR (tail))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7588 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7589 if (EQ (XCAR (tail), key)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7590 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7591 if (found) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7592 *found = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7593 return XCAR (XCDR (tail)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7594 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7595 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7596 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7597 if (found) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7598 *found = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7599 return Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7600 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7601 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7602 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7603 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7604 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7605 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7606 Image type independent image structures |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7607 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7608 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7609 static struct image *make_image P_ ((Lisp_Object spec, unsigned hash)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7610 static void free_image P_ ((struct frame *f, struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7611 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7612 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7613 /* Allocate and return a new image structure for image specification |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7614 SPEC. SPEC has a hash value of HASH. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7615 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7616 static struct image * |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7617 make_image (spec, hash) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7618 Lisp_Object spec; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7619 unsigned hash; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7620 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7621 struct image *img = (struct image *) xmalloc (sizeof *img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7622 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7623 xassert (valid_image_p (spec)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7624 bzero (img, sizeof *img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7625 img->type = lookup_image_type (image_spec_value (spec, QCtype, NULL)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7626 xassert (img->type != NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7627 img->spec = spec; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7628 img->data.lisp_val = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7629 img->ascent = DEFAULT_IMAGE_ASCENT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7630 img->hash = hash; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7631 return img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7632 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7633 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7634 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7635 /* Free image IMG which was used on frame F, including its resources. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7636 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7637 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7638 free_image (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7639 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7640 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7641 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7642 if (img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7643 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7644 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7645 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7646 /* Remove IMG from the hash table of its cache. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7647 if (img->prev) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7648 img->prev->next = img->next; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7649 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7650 c->buckets[img->hash % IMAGE_CACHE_BUCKETS_SIZE] = img->next; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7651 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7652 if (img->next) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7653 img->next->prev = img->prev; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7654 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7655 c->images[img->id] = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7656 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7657 /* Free resources, then free IMG. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7658 img->type->free (f, img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7659 xfree (img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7660 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7661 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7662 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7663 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7664 /* Prepare image IMG for display on frame F. Must be called before |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7665 drawing an image. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7666 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7667 void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7668 prepare_image_for_display (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7669 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7670 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7671 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7672 EMACS_TIME t; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7673 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7674 /* We're about to display IMG, so set its timestamp to `now'. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7675 EMACS_GET_TIME (t); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7676 img->timestamp = EMACS_SECS (t); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7677 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7678 /* If IMG doesn't have a pixmap yet, load it now, using the image |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7679 type dependent loader function. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7680 if (img->pixmap == 0 && !img->load_failed_p) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7681 img->load_failed_p = img->type->load (f, img) == 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7682 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7683 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7684 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7685 /* Value is the number of pixels for the ascent of image IMG when |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7686 drawn in face FACE. */ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7687 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7688 int |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7689 image_ascent (img, face) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7690 struct image *img; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7691 struct face *face; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7692 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7693 int height = img->height + img->margin; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7694 int ascent; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7695 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7696 if (img->ascent == CENTERED_IMAGE_ASCENT) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7697 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7698 if (face->font) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7699 ascent = height / 2 - (FONT_DESCENT(face->font) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7700 - FONT_BASE(face->font)) / 2; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7701 else |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7702 ascent = height / 2; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7703 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7704 else |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7705 ascent = height * img->ascent / 100.0; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7706 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7707 return ascent; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7708 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7709 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7710 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7711 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7712 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7713 Helper functions for X image types |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7714 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7715 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7716 static void x_clear_image P_ ((struct frame *f, struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7717 static unsigned long x_alloc_image_color P_ ((struct frame *f, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7718 struct image *img, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7719 Lisp_Object color_name, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7720 unsigned long dflt)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7721 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7722 /* Free X resources of image IMG which is used on frame F. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7723 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7724 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7725 x_clear_image (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7726 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7727 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7728 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7729 #if 0 /* NTEMACS_TODO: W32 image support */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7730 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7731 if (img->pixmap) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7732 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7733 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7734 XFreePixmap (NULL, img->pixmap); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7735 img->pixmap = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7736 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7737 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7738 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7739 if (img->ncolors) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7740 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7741 int class = FRAME_W32_DISPLAY_INFO (f)->visual->class; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7742 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7743 /* If display has an immutable color map, freeing colors is not |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7744 necessary and some servers don't allow it. So don't do it. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7745 if (class != StaticColor |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7746 && class != StaticGray |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7747 && class != TrueColor) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7748 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7749 Colormap cmap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7750 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7751 cmap = DefaultColormapOfScreen (FRAME_W32_DISPLAY_INFO (f)->screen); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7752 XFreeColors (FRAME_W32_DISPLAY (f), cmap, img->colors, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7753 img->ncolors, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7754 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7755 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7756 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7757 xfree (img->colors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7758 img->colors = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7759 img->ncolors = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7760 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7761 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7762 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7763 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7764 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7765 /* Allocate color COLOR_NAME for image IMG on frame F. If color |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7766 cannot be allocated, use DFLT. Add a newly allocated color to |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7767 IMG->colors, so that it can be freed again. Value is the pixel |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7768 color. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7769 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7770 static unsigned long |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7771 x_alloc_image_color (f, img, color_name, dflt) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7772 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7773 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7774 Lisp_Object color_name; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7775 unsigned long dflt; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7776 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7777 #if 0 /* NTEMACS_TODO: allocing colors. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7778 XColor color; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7779 unsigned long result; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7780 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7781 xassert (STRINGP (color_name)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7782 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7783 if (w32_defined_color (f, XSTRING (color_name)->data, &color, 1)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7784 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7785 /* This isn't called frequently so we get away with simply |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7786 reallocating the color vector to the needed size, here. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7787 ++img->ncolors; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7788 img->colors = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7789 (unsigned long *) xrealloc (img->colors, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7790 img->ncolors * sizeof *img->colors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7791 img->colors[img->ncolors - 1] = color.pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7792 result = color.pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7793 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7794 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7795 result = dflt; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7796 return result; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7797 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7798 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7799 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7800 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7801 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7802 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7803 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7804 Image Cache |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7805 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7806 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7807 static void cache_image P_ ((struct frame *f, struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7808 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7809 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7810 /* Return a new, initialized image cache that is allocated from the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7811 heap. Call free_image_cache to free an image cache. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7812 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7813 struct image_cache * |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7814 make_image_cache () |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7815 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7816 struct image_cache *c = (struct image_cache *) xmalloc (sizeof *c); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7817 int size; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7818 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7819 bzero (c, sizeof *c); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7820 c->size = 50; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7821 c->images = (struct image **) xmalloc (c->size * sizeof *c->images); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7822 size = IMAGE_CACHE_BUCKETS_SIZE * sizeof *c->buckets; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7823 c->buckets = (struct image **) xmalloc (size); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7824 bzero (c->buckets, size); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7825 return c; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7826 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7827 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7828 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7829 /* Free image cache of frame F. Be aware that X frames share images |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7830 caches. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7831 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7832 void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7833 free_image_cache (f) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7834 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7835 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7836 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7837 if (c) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7838 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7839 int i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7840 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7841 /* Cache should not be referenced by any frame when freed. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7842 xassert (c->refcount == 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7843 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7844 for (i = 0; i < c->used; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7845 free_image (f, c->images[i]); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7846 xfree (c->images); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7847 xfree (c); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7848 xfree (c->buckets); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7849 FRAME_X_IMAGE_CACHE (f) = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7850 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7851 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7852 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7853 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7854 /* Clear image cache of frame F. FORCE_P non-zero means free all |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7855 images. FORCE_P zero means clear only images that haven't been |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7856 displayed for some time. Should be called from time to time to |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7857 reduce the number of loaded images. If image-eviction-seconds is |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7858 non-nil, this frees images in the cache which weren't displayed for |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7859 at least that many seconds. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7860 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7861 void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7862 clear_image_cache (f, force_p) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7863 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7864 int force_p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7865 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7866 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7867 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7868 if (c && INTEGERP (Vimage_cache_eviction_delay)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7869 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7870 EMACS_TIME t; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7871 unsigned long old; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7872 int i, any_freed_p = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7873 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7874 EMACS_GET_TIME (t); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7875 old = EMACS_SECS (t) - XFASTINT (Vimage_cache_eviction_delay); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7876 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7877 for (i = 0; i < c->used; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7878 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7879 struct image *img = c->images[i]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7880 if (img != NULL |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7881 && (force_p |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7882 || (img->timestamp > old))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7883 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7884 free_image (f, img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7885 any_freed_p = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7886 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7887 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7888 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7889 /* We may be clearing the image cache because, for example, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7890 Emacs was iconified for a longer period of time. In that |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7891 case, current matrices may still contain references to |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7892 images freed above. So, clear these matrices. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7893 if (any_freed_p) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7894 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7895 clear_current_matrices (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7896 ++windows_or_buffers_changed; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7897 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7898 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7899 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7900 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7901 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7902 DEFUN ("clear-image-cache", Fclear_image_cache, Sclear_image_cache, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7903 0, 1, 0, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7904 "Clear the image cache of FRAME.\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7905 FRAME nil or omitted means use the selected frame.\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7906 FRAME t means clear the image caches of all frames.") |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7907 (frame) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7908 Lisp_Object frame; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7909 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7910 if (EQ (frame, Qt)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7911 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7912 Lisp_Object tail; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7913 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7914 FOR_EACH_FRAME (tail, frame) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7915 if (FRAME_W32_P (XFRAME (frame))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7916 clear_image_cache (XFRAME (frame), 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7917 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7918 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7919 clear_image_cache (check_x_frame (frame), 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7920 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7921 return Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7922 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7923 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7924 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7925 /* Return the id of image with Lisp specification SPEC on frame F. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7926 SPEC must be a valid Lisp image specification (see valid_image_p). */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7927 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7928 int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7929 lookup_image (f, spec) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7930 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7931 Lisp_Object spec; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7932 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7933 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7934 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7935 int i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7936 unsigned hash; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7937 struct gcpro gcpro1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7938 EMACS_TIME now; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7939 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7940 /* F must be a window-system frame, and SPEC must be a valid image |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7941 specification. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7942 xassert (FRAME_WINDOW_P (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7943 xassert (valid_image_p (spec)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7944 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7945 GCPRO1 (spec); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7946 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7947 /* Look up SPEC in the hash table of the image cache. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7948 hash = sxhash (spec, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7949 i = hash % IMAGE_CACHE_BUCKETS_SIZE; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7950 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7951 for (img = c->buckets[i]; img; img = img->next) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7952 if (img->hash == hash && !NILP (Fequal (img->spec, spec))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7953 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7954 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7955 /* If not found, create a new image and cache it. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7956 if (img == NULL) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7957 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7958 img = make_image (spec, hash); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7959 cache_image (f, img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7960 img->load_failed_p = img->type->load (f, img) == 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7961 xassert (!interrupt_input_blocked); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7962 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7963 /* If we can't load the image, and we don't have a width and |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7964 height, use some arbitrary width and height so that we can |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7965 draw a rectangle for it. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7966 if (img->load_failed_p) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7967 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7968 Lisp_Object value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7969 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7970 value = image_spec_value (spec, QCwidth, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7971 img->width = (INTEGERP (value) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7972 ? XFASTINT (value) : DEFAULT_IMAGE_WIDTH); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7973 value = image_spec_value (spec, QCheight, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7974 img->height = (INTEGERP (value) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7975 ? XFASTINT (value) : DEFAULT_IMAGE_HEIGHT); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7976 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7977 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7978 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7979 /* Handle image type independent image attributes |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7980 `:ascent PERCENT', `:margin MARGIN', `:relief RELIEF'. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7981 Lisp_Object ascent, margin, relief, algorithm, heuristic_mask; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7982 Lisp_Object file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7983 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7984 ascent = image_spec_value (spec, QCascent, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7985 if (INTEGERP (ascent)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7986 img->ascent = XFASTINT (ascent); |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7987 else if (EQ (ascent, Qcenter)) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7988 img->ascent = CENTERED_IMAGE_ASCENT; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
7989 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7990 margin = image_spec_value (spec, QCmargin, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7991 if (INTEGERP (margin) && XINT (margin) >= 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7992 img->margin = XFASTINT (margin); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7993 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7994 relief = image_spec_value (spec, QCrelief, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7995 if (INTEGERP (relief)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7996 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7997 img->relief = XINT (relief); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7998 img->margin += abs (img->relief); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
7999 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8000 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8001 /* Should we apply a Laplace edge-detection algorithm? */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8002 algorithm = image_spec_value (spec, QCalgorithm, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8003 if (img->pixmap && EQ (algorithm, Qlaplace)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8004 x_laplace (f, img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8005 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8006 /* Should we built a mask heuristically? */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8007 heuristic_mask = image_spec_value (spec, QCheuristic_mask, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8008 if (img->pixmap && !img->mask && !NILP (heuristic_mask)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8009 x_build_heuristic_mask (f, img, heuristic_mask); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8010 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8011 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8012 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8013 /* We're using IMG, so set its timestamp to `now'. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8014 EMACS_GET_TIME (now); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8015 img->timestamp = EMACS_SECS (now); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8016 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8017 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8018 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8019 /* Value is the image id. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8020 return img->id; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8021 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8022 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8023 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8024 /* Cache image IMG in the image cache of frame F. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8025 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8026 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8027 cache_image (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8028 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8029 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8030 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8031 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8032 int i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8033 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8034 /* Find a free slot in c->images. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8035 for (i = 0; i < c->used; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8036 if (c->images[i] == NULL) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8037 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8038 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8039 /* If no free slot found, maybe enlarge c->images. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8040 if (i == c->used && c->used == c->size) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8041 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8042 c->size *= 2; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8043 c->images = (struct image **) xrealloc (c->images, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8044 c->size * sizeof *c->images); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8045 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8046 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8047 /* Add IMG to c->images, and assign IMG an id. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8048 c->images[i] = img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8049 img->id = i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8050 if (i == c->used) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8051 ++c->used; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8052 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8053 /* Add IMG to the cache's hash table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8054 i = img->hash % IMAGE_CACHE_BUCKETS_SIZE; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8055 img->next = c->buckets[i]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8056 if (img->next) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8057 img->next->prev = img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8058 img->prev = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8059 c->buckets[i] = img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8060 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8061 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8062 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8063 /* Call FN on every image in the image cache of frame F. Used to mark |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8064 Lisp Objects in the image cache. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8065 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8066 void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8067 forall_images_in_image_cache (f, fn) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8068 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8069 void (*fn) P_ ((struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8070 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8071 if (FRAME_LIVE_P (f) && FRAME_W32_P (f)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8072 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8073 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8074 if (c) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8075 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8076 int i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8077 for (i = 0; i < c->used; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8078 if (c->images[i]) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8079 fn (c->images[i]); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8080 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8081 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8082 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8083 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8084 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8085 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8086 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8087 W32 support code |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8088 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8089 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8090 #if 0 /* NTEMACS_TODO: W32 specific image code. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8091 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8092 static int x_create_x_image_and_pixmap P_ ((struct frame *, int, int, int, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8093 XImage **, Pixmap *)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8094 static void x_destroy_x_image P_ ((XImage *)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8095 static void x_put_x_image P_ ((struct frame *, XImage *, Pixmap, int, int)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8096 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8097 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8098 /* Create an XImage and a pixmap of size WIDTH x HEIGHT for use on |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8099 frame F. Set *XIMG and *PIXMAP to the XImage and Pixmap created. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8100 Set (*XIMG)->data to a raster of WIDTH x HEIGHT pixels allocated |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8101 via xmalloc. Print error messages via image_error if an error |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8102 occurs. Value is non-zero if successful. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8103 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8104 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8105 x_create_x_image_and_pixmap (f, width, height, depth, ximg, pixmap) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8106 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8107 int width, height, depth; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8108 XImage **ximg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8109 Pixmap *pixmap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8110 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8111 #if 0 /* NTEMACS_TODO: Image support for W32 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8112 Display *display = FRAME_W32_DISPLAY (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8113 Screen *screen = FRAME_X_SCREEN (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8114 Window window = FRAME_W32_WINDOW (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8115 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8116 xassert (interrupt_input_blocked); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8117 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8118 if (depth <= 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8119 depth = DefaultDepthOfScreen (screen); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8120 *ximg = XCreateImage (display, DefaultVisualOfScreen (screen), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8121 depth, ZPixmap, 0, NULL, width, height, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8122 depth > 16 ? 32 : depth > 8 ? 16 : 8, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8123 if (*ximg == NULL) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8124 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8125 image_error ("Unable to allocate X image", Qnil, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8126 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8127 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8128 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8129 /* Allocate image raster. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8130 (*ximg)->data = (char *) xmalloc ((*ximg)->bytes_per_line * height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8131 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8132 /* Allocate a pixmap of the same size. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8133 *pixmap = XCreatePixmap (display, window, width, height, depth); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8134 if (*pixmap == 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8135 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8136 x_destroy_x_image (*ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8137 *ximg = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8138 image_error ("Unable to create X pixmap", Qnil, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8139 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8140 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8141 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8142 return 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8143 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8144 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8145 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8146 /* Destroy XImage XIMG. Free XIMG->data. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8147 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8148 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8149 x_destroy_x_image (ximg) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8150 XImage *ximg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8151 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8152 xassert (interrupt_input_blocked); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8153 if (ximg) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8154 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8155 xfree (ximg->data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8156 ximg->data = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8157 XDestroyImage (ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8158 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8159 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8160 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8161 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8162 /* Put XImage XIMG into pixmap PIXMAP on frame F. WIDTH and HEIGHT |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8163 are width and height of both the image and pixmap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8164 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8165 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8166 x_put_x_image (f, ximg, pixmap, width, height) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8167 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8168 XImage *ximg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8169 Pixmap pixmap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8170 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8171 GC gc; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8172 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8173 xassert (interrupt_input_blocked); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8174 gc = XCreateGC (NULL, pixmap, 0, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8175 XPutImage (NULL, pixmap, gc, ximg, 0, 0, 0, 0, width, height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8176 XFreeGC (NULL, gc); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8177 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8178 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8179 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8180 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8181 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8182 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8183 Searching files |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8184 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8185 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8186 static Lisp_Object x_find_image_file P_ ((Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8187 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8188 /* Find image file FILE. Look in data-directory, then |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8189 x-bitmap-file-path. Value is the full name of the file found, or |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8190 nil if not found. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8191 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8192 static Lisp_Object |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8193 x_find_image_file (file) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8194 Lisp_Object file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8195 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8196 Lisp_Object file_found, search_path; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8197 struct gcpro gcpro1, gcpro2; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8198 int fd; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8199 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8200 file_found = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8201 search_path = Fcons (Vdata_directory, Vx_bitmap_file_path); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8202 GCPRO2 (file_found, search_path); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8203 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8204 /* Try to find FILE in data-directory, then x-bitmap-file-path. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8205 fd = openp (search_path, file, "", &file_found, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8206 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8207 if (fd < 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8208 file_found = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8209 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8210 close (fd); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8211 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8212 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8213 return file_found; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8214 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8215 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8216 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8217 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8218 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8219 XBM images |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8220 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8221 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8222 static int xbm_load P_ ((struct frame *f, struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8223 static int xbm_load_image_from_file P_ ((struct frame *f, struct image *img, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8224 Lisp_Object file)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8225 static int xbm_image_p P_ ((Lisp_Object object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8226 static int xbm_read_bitmap_file_data P_ ((char *, int *, int *, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8227 unsigned char **)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8228 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8229 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8230 /* Indices of image specification fields in xbm_format, below. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8231 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8232 enum xbm_keyword_index |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8233 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8234 XBM_TYPE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8235 XBM_FILE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8236 XBM_WIDTH, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8237 XBM_HEIGHT, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8238 XBM_DATA, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8239 XBM_FOREGROUND, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8240 XBM_BACKGROUND, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8241 XBM_ASCENT, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8242 XBM_MARGIN, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8243 XBM_RELIEF, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8244 XBM_ALGORITHM, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8245 XBM_HEURISTIC_MASK, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8246 XBM_LAST |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8247 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8248 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8249 /* Vector of image_keyword structures describing the format |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8250 of valid XBM image specifications. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8251 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8252 static struct image_keyword xbm_format[XBM_LAST] = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8253 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8254 {":type", IMAGE_SYMBOL_VALUE, 1}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8255 {":file", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8256 {":width", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8257 {":height", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8258 {":data", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8259 {":foreground", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8260 {":background", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8261 {":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8262 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8263 {":relief", IMAGE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8264 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8265 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8266 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8267 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8268 /* Structure describing the image type XBM. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8269 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8270 static struct image_type xbm_type = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8271 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8272 &Qxbm, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8273 xbm_image_p, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8274 xbm_load, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8275 x_clear_image, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8276 NULL |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8277 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8278 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8279 /* Tokens returned from xbm_scan. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8280 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8281 enum xbm_token |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8282 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8283 XBM_TK_IDENT = 256, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8284 XBM_TK_NUMBER |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8285 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8286 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8287 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8288 /* Return non-zero if OBJECT is a valid XBM-type image specification. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8289 A valid specification is a list starting with the symbol `image' |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8290 The rest of the list is a property list which must contain an |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8291 entry `:type xbm.. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8292 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8293 If the specification specifies a file to load, it must contain |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8294 an entry `:file FILENAME' where FILENAME is a string. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8295 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8296 If the specification is for a bitmap loaded from memory it must |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8297 contain `:width WIDTH', `:height HEIGHT', and `:data DATA', where |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8298 WIDTH and HEIGHT are integers > 0. DATA may be: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8299 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8300 1. a string large enough to hold the bitmap data, i.e. it must |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8301 have a size >= (WIDTH + 7) / 8 * HEIGHT |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8302 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8303 2. a bool-vector of size >= WIDTH * HEIGHT |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8304 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8305 3. a vector of strings or bool-vectors, one for each line of the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8306 bitmap. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8307 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8308 Both the file and data forms may contain the additional entries |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8309 `:background COLOR' and `:foreground COLOR'. If not present, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8310 foreground and background of the frame on which the image is |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8311 displayed, is used. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8312 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8313 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8314 xbm_image_p (object) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8315 Lisp_Object object; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8316 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8317 struct image_keyword kw[XBM_LAST]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8318 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8319 bcopy (xbm_format, kw, sizeof kw); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8320 if (!parse_image_spec (object, kw, XBM_LAST, Qxbm)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8321 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8322 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8323 xassert (EQ (kw[XBM_TYPE].value, Qxbm)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8324 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8325 if (kw[XBM_FILE].count) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8326 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8327 if (kw[XBM_WIDTH].count || kw[XBM_HEIGHT].count || kw[XBM_DATA].count) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8328 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8329 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8330 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8331 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8332 Lisp_Object data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8333 int width, height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8334 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8335 /* Entries for `:width', `:height' and `:data' must be present. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8336 if (!kw[XBM_WIDTH].count |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8337 || !kw[XBM_HEIGHT].count |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8338 || !kw[XBM_DATA].count) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8339 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8340 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8341 data = kw[XBM_DATA].value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8342 width = XFASTINT (kw[XBM_WIDTH].value); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8343 height = XFASTINT (kw[XBM_HEIGHT].value); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8344 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8345 /* Check type of data, and width and height against contents of |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8346 data. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8347 if (VECTORP (data)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8348 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8349 int i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8350 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8351 /* Number of elements of the vector must be >= height. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8352 if (XVECTOR (data)->size < height) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8353 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8354 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8355 /* Each string or bool-vector in data must be large enough |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8356 for one line of the image. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8357 for (i = 0; i < height; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8358 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8359 Lisp_Object elt = XVECTOR (data)->contents[i]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8360 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8361 if (STRINGP (elt)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8362 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8363 if (XSTRING (elt)->size |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8364 < (width + BITS_PER_CHAR - 1) / BITS_PER_CHAR) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8365 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8366 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8367 else if (BOOL_VECTOR_P (elt)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8368 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8369 if (XBOOL_VECTOR (elt)->size < width) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8370 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8371 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8372 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8373 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8374 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8375 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8376 else if (STRINGP (data)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8377 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8378 if (XSTRING (data)->size |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8379 < (width + BITS_PER_CHAR - 1) / BITS_PER_CHAR * height) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8380 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8381 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8382 else if (BOOL_VECTOR_P (data)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8383 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8384 if (XBOOL_VECTOR (data)->size < width * height) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8385 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8386 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8387 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8388 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8389 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8390 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8391 /* Baseline must be a value between 0 and 100 (a percentage). */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8392 if (kw[XBM_ASCENT].count |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8393 && XFASTINT (kw[XBM_ASCENT].value) > 100) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8394 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8395 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8396 return 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8397 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8398 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8399 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8400 /* Scan a bitmap file. FP is the stream to read from. Value is |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8401 either an enumerator from enum xbm_token, or a character for a |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8402 single-character token, or 0 at end of file. If scanning an |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8403 identifier, store the lexeme of the identifier in SVAL. If |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8404 scanning a number, store its value in *IVAL. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8405 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8406 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8407 xbm_scan (fp, sval, ival) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8408 FILE *fp; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8409 char *sval; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8410 int *ival; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8411 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8412 int c; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8413 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8414 /* Skip white space. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8415 while ((c = fgetc (fp)) != EOF && isspace (c)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8416 ; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8417 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8418 if (c == EOF) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8419 c = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8420 else if (isdigit (c)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8421 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8422 int value = 0, digit; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8423 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8424 if (c == '0') |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8425 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8426 c = fgetc (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8427 if (c == 'x' || c == 'X') |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8428 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8429 while ((c = fgetc (fp)) != EOF) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8430 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8431 if (isdigit (c)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8432 digit = c - '0'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8433 else if (c >= 'a' && c <= 'f') |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8434 digit = c - 'a' + 10; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8435 else if (c >= 'A' && c <= 'F') |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8436 digit = c - 'A' + 10; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8437 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8438 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8439 value = 16 * value + digit; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8440 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8441 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8442 else if (isdigit (c)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8443 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8444 value = c - '0'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8445 while ((c = fgetc (fp)) != EOF |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8446 && isdigit (c)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8447 value = 8 * value + c - '0'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8448 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8449 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8450 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8451 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8452 value = c - '0'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8453 while ((c = fgetc (fp)) != EOF |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8454 && isdigit (c)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8455 value = 10 * value + c - '0'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8456 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8457 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8458 if (c != EOF) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8459 ungetc (c, fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8460 *ival = value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8461 c = XBM_TK_NUMBER; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8462 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8463 else if (isalpha (c) || c == '_') |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8464 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8465 *sval++ = c; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8466 while ((c = fgetc (fp)) != EOF |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8467 && (isalnum (c) || c == '_')) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8468 *sval++ = c; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8469 *sval = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8470 if (c != EOF) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8471 ungetc (c, fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8472 c = XBM_TK_IDENT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8473 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8474 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8475 return c; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8476 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8477 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8478 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8479 /* Replacement for XReadBitmapFileData which isn't available under old |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8480 X versions. FILE is the name of the bitmap file to read. Set |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8481 *WIDTH and *HEIGHT to the width and height of the image. Return in |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8482 *DATA the bitmap data allocated with xmalloc. Value is non-zero if |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8483 successful. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8484 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8485 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8486 xbm_read_bitmap_file_data (file, width, height, data) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8487 char *file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8488 int *width, *height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8489 unsigned char **data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8490 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8491 FILE *fp; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8492 char buffer[BUFSIZ]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8493 int padding_p = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8494 int v10 = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8495 int bytes_per_line, i, nbytes; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8496 unsigned char *p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8497 int value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8498 int LA1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8499 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8500 #define match() \ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8501 LA1 = xbm_scan (fp, buffer, &value) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8502 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8503 #define expect(TOKEN) \ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8504 if (LA1 != (TOKEN)) \ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8505 goto failure; \ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8506 else \ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8507 match () |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8508 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8509 #define expect_ident(IDENT) \ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8510 if (LA1 == XBM_TK_IDENT && strcmp (buffer, (IDENT)) == 0) \ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8511 match (); \ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8512 else \ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8513 goto failure |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8514 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8515 fp = fopen (file, "r"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8516 if (fp == NULL) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8517 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8518 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8519 *width = *height = -1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8520 *data = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8521 LA1 = xbm_scan (fp, buffer, &value); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8522 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8523 /* Parse defines for width, height and hot-spots. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8524 while (LA1 == '#') |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8525 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8526 match (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8527 expect_ident ("define"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8528 expect (XBM_TK_IDENT); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8529 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8530 if (LA1 == XBM_TK_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8531 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8532 char *p = strrchr (buffer, '_'); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8533 p = p ? p + 1 : buffer; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8534 if (strcmp (p, "width") == 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8535 *width = value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8536 else if (strcmp (p, "height") == 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8537 *height = value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8538 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8539 expect (XBM_TK_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8540 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8541 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8542 if (*width < 0 || *height < 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8543 goto failure; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8544 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8545 /* Parse bits. Must start with `static'. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8546 expect_ident ("static"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8547 if (LA1 == XBM_TK_IDENT) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8548 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8549 if (strcmp (buffer, "unsigned") == 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8550 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8551 match (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8552 expect_ident ("char"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8553 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8554 else if (strcmp (buffer, "short") == 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8555 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8556 match (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8557 v10 = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8558 if (*width % 16 && *width % 16 < 9) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8559 padding_p = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8560 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8561 else if (strcmp (buffer, "char") == 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8562 match (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8563 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8564 goto failure; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8565 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8566 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8567 goto failure; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8568 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8569 expect (XBM_TK_IDENT); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8570 expect ('['); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8571 expect (']'); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8572 expect ('='); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8573 expect ('{'); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8574 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8575 bytes_per_line = (*width + 7) / 8 + padding_p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8576 nbytes = bytes_per_line * *height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8577 p = *data = (char *) xmalloc (nbytes); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8578 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8579 if (v10) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8580 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8581 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8582 for (i = 0; i < nbytes; i += 2) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8583 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8584 int val = value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8585 expect (XBM_TK_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8586 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8587 *p++ = val; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8588 if (!padding_p || ((i + 2) % bytes_per_line)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8589 *p++ = value >> 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8590 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8591 if (LA1 == ',' || LA1 == '}') |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8592 match (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8593 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8594 goto failure; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8595 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8596 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8597 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8598 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8599 for (i = 0; i < nbytes; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8600 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8601 int val = value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8602 expect (XBM_TK_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8603 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8604 *p++ = val; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8605 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8606 if (LA1 == ',' || LA1 == '}') |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8607 match (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8608 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8609 goto failure; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8610 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8611 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8612 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8613 fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8614 return 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8615 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8616 failure: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8617 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8618 fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8619 if (*data) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8620 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8621 xfree (*data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8622 *data = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8623 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8624 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8625 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8626 #undef match |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8627 #undef expect |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8628 #undef expect_ident |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8629 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8630 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8631 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8632 /* Load XBM image IMG which will be displayed on frame F from file |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8633 SPECIFIED_FILE. Value is non-zero if successful. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8634 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8635 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8636 xbm_load_image_from_file (f, img, specified_file) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8637 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8638 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8639 Lisp_Object specified_file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8640 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8641 int rc; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8642 unsigned char *data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8643 int success_p = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8644 Lisp_Object file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8645 struct gcpro gcpro1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8646 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8647 xassert (STRINGP (specified_file)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8648 file = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8649 GCPRO1 (file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8650 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8651 file = x_find_image_file (specified_file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8652 if (!STRINGP (file)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8653 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8654 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8655 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8656 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8657 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8658 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8659 rc = xbm_read_bitmap_file_data (XSTRING (file)->data, &img->width, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8660 &img->height, &data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8661 if (rc) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8662 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8663 int depth = one_w32_display_info.n_cbits; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8664 unsigned long foreground = FRAME_FOREGROUND_PIXEL (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8665 unsigned long background = FRAME_BACKGROUND_PIXEL (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8666 Lisp_Object value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8667 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8668 xassert (img->width > 0 && img->height > 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8669 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8670 /* Get foreground and background colors, maybe allocate colors. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8671 value = image_spec_value (img->spec, QCforeground, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8672 if (!NILP (value)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8673 foreground = x_alloc_image_color (f, img, value, foreground); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8674 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8675 value = image_spec_value (img->spec, QCbackground, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8676 if (!NILP (value)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8677 background = x_alloc_image_color (f, img, value, background); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8678 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8679 #if 0 /* NTEMACS_TODO : Port image display to W32 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8680 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8681 img->pixmap |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8682 = XCreatePixmapFromBitmapData (FRAME_W32_DISPLAY (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8683 FRAME_W32_WINDOW (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8684 data, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8685 img->width, img->height, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8686 foreground, background, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8687 depth); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8688 xfree (data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8689 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8690 if (img->pixmap == 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8691 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8692 x_clear_image (f, img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8693 image_error ("Unable to create X pixmap for `%s'", file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8694 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8695 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8696 success_p = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8697 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8698 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8699 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8700 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8701 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8702 image_error ("Error loading XBM image `%s'", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8703 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8704 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8705 return success_p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8706 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8707 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8708 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8709 /* Fill image IMG which is used on frame F with pixmap data. Value is |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8710 non-zero if successful. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8711 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8712 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8713 xbm_load (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8714 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8715 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8716 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8717 int success_p = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8718 Lisp_Object file_name; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8719 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8720 xassert (xbm_image_p (img->spec)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8721 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8722 /* If IMG->spec specifies a file name, create a non-file spec from it. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8723 file_name = image_spec_value (img->spec, QCfile, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8724 if (STRINGP (file_name)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8725 success_p = xbm_load_image_from_file (f, img, file_name); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8726 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8727 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8728 struct image_keyword fmt[XBM_LAST]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8729 Lisp_Object data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8730 int depth; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8731 unsigned long foreground = FRAME_FOREGROUND_PIXEL (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8732 unsigned long background = FRAME_BACKGROUND_PIXEL (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8733 char *bits; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8734 int parsed_p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8735 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8736 /* Parse the list specification. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8737 bcopy (xbm_format, fmt, sizeof fmt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8738 parsed_p = parse_image_spec (img->spec, fmt, XBM_LAST, Qxbm); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8739 xassert (parsed_p); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8740 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8741 /* Get specified width, and height. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8742 img->width = XFASTINT (fmt[XBM_WIDTH].value); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8743 img->height = XFASTINT (fmt[XBM_HEIGHT].value); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8744 xassert (img->width > 0 && img->height > 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8745 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8746 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8747 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8748 if (fmt[XBM_ASCENT].count) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8749 img->ascent = XFASTINT (fmt[XBM_ASCENT].value); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8750 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8751 /* Get foreground and background colors, maybe allocate colors. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8752 if (fmt[XBM_FOREGROUND].count) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8753 foreground = x_alloc_image_color (f, img, fmt[XBM_FOREGROUND].value, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8754 foreground); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8755 if (fmt[XBM_BACKGROUND].count) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8756 background = x_alloc_image_color (f, img, fmt[XBM_BACKGROUND].value, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8757 background); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8758 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8759 /* Set bits to the bitmap image data. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8760 data = fmt[XBM_DATA].value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8761 if (VECTORP (data)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8762 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8763 int i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8764 char *p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8765 int nbytes = (img->width + BITS_PER_CHAR - 1) / BITS_PER_CHAR; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8766 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8767 p = bits = (char *) alloca (nbytes * img->height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8768 for (i = 0; i < img->height; ++i, p += nbytes) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8769 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8770 Lisp_Object line = XVECTOR (data)->contents[i]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8771 if (STRINGP (line)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8772 bcopy (XSTRING (line)->data, p, nbytes); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8773 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8774 bcopy (XBOOL_VECTOR (line)->data, p, nbytes); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8775 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8776 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8777 else if (STRINGP (data)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8778 bits = XSTRING (data)->data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8779 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8780 bits = XBOOL_VECTOR (data)->data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8781 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8782 #if 0 /* NTEMACS_TODO : W32 XPM code */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8783 /* Create the pixmap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8784 depth = DefaultDepthOfScreen (FRAME_X_SCREEN (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8785 img->pixmap |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8786 = XCreatePixmapFromBitmapData (FRAME_W32_DISPLAY (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8787 FRAME_W32_WINDOW (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8788 bits, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8789 img->width, img->height, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8790 foreground, background, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8791 depth); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8792 #endif /* NTEMACS_TODO */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8793 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8794 if (img->pixmap) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8795 success_p = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8796 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8797 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8798 image_error ("Unable to create pixmap for XBM image `%s'", |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8799 img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8800 x_clear_image (f, img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8801 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8802 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8803 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8804 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8805 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8806 return success_p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8807 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8808 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8809 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8810 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8811 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8812 XPM images |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8813 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8814 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8815 #if HAVE_XPM |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8816 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8817 static int xpm_image_p P_ ((Lisp_Object object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8818 static int xpm_load P_ ((struct frame *f, struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8819 static int xpm_valid_color_symbols_p P_ ((Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8820 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8821 #include "X11/xpm.h" |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8822 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8823 /* The symbol `xpm' identifying XPM-format images. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8824 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8825 Lisp_Object Qxpm; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8826 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8827 /* Indices of image specification fields in xpm_format, below. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8828 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8829 enum xpm_keyword_index |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8830 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8831 XPM_TYPE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8832 XPM_FILE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8833 XPM_DATA, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8834 XPM_ASCENT, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8835 XPM_MARGIN, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8836 XPM_RELIEF, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8837 XPM_ALGORITHM, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8838 XPM_HEURISTIC_MASK, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8839 XPM_COLOR_SYMBOLS, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8840 XPM_LAST |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8841 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8842 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8843 /* Vector of image_keyword structures describing the format |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8844 of valid XPM image specifications. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8845 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8846 static struct image_keyword xpm_format[XPM_LAST] = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8847 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8848 {":type", IMAGE_SYMBOL_VALUE, 1}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8849 {":file", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8850 {":data", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8851 {":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8852 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8853 {":relief", IMAGE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8854 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8855 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8856 {":color-symbols", IMAGE_DONT_CHECK_VALUE_TYPE, 0} |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8857 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8858 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8859 /* Structure describing the image type XBM. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8860 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8861 static struct image_type xpm_type = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8862 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8863 &Qxpm, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8864 xpm_image_p, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8865 xpm_load, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8866 x_clear_image, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8867 NULL |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8868 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8869 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8870 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8871 /* Value is non-zero if COLOR_SYMBOLS is a valid color symbols list |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8872 for XPM images. Such a list must consist of conses whose car and |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8873 cdr are strings. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8874 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8875 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8876 xpm_valid_color_symbols_p (color_symbols) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8877 Lisp_Object color_symbols; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8878 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8879 while (CONSP (color_symbols)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8880 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8881 Lisp_Object sym = XCAR (color_symbols); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8882 if (!CONSP (sym) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8883 || !STRINGP (XCAR (sym)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8884 || !STRINGP (XCDR (sym))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8885 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8886 color_symbols = XCDR (color_symbols); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8887 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8888 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8889 return NILP (color_symbols); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8890 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8891 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8892 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8893 /* Value is non-zero if OBJECT is a valid XPM image specification. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8894 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8895 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8896 xpm_image_p (object) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8897 Lisp_Object object; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8898 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8899 struct image_keyword fmt[XPM_LAST]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8900 bcopy (xpm_format, fmt, sizeof fmt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8901 return (parse_image_spec (object, fmt, XPM_LAST, Qxpm) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8902 /* Either `:file' or `:data' must be present. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8903 && fmt[XPM_FILE].count + fmt[XPM_DATA].count == 1 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8904 /* Either no `:color-symbols' or it's a list of conses |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8905 whose car and cdr are strings. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8906 && (fmt[XPM_COLOR_SYMBOLS].count == 0 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8907 || xpm_valid_color_symbols_p (fmt[XPM_COLOR_SYMBOLS].value)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8908 && (fmt[XPM_ASCENT].count == 0 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8909 || XFASTINT (fmt[XPM_ASCENT].value) < 100)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8910 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8911 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8912 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8913 /* Load image IMG which will be displayed on frame F. Value is |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8914 non-zero if successful. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8915 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8916 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8917 xpm_load (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8918 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8919 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8920 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8921 int rc, i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8922 XpmAttributes attrs; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8923 Lisp_Object specified_file, color_symbols; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8924 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8925 /* Configure the XPM lib. Use the visual of frame F. Allocate |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8926 close colors. Return colors allocated. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8927 bzero (&attrs, sizeof attrs); |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
8928 attrs.visual = FRAME_X_VISUAL (f); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
8929 attrs.colormap = FRAME_X_COLORMAP (f); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8930 attrs.valuemask |= XpmVisual; |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
8931 attrs.valuemask |= XpmColormap; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8932 attrs.valuemask |= XpmReturnAllocPixels; |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
8933 #ifdef XpmAllocCloseColors |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8934 attrs.alloc_close_colors = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8935 attrs.valuemask |= XpmAllocCloseColors; |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
8936 #else |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
8937 attrs.closeness = 600; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
8938 attrs.valuemask |= XpmCloseness; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
8939 #endif |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8940 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8941 /* If image specification contains symbolic color definitions, add |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8942 these to `attrs'. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8943 color_symbols = image_spec_value (img->spec, QCcolor_symbols, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8944 if (CONSP (color_symbols)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8945 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8946 Lisp_Object tail; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8947 XpmColorSymbol *xpm_syms; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8948 int i, size; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8949 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8950 attrs.valuemask |= XpmColorSymbols; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8951 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8952 /* Count number of symbols. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8953 attrs.numsymbols = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8954 for (tail = color_symbols; CONSP (tail); tail = XCDR (tail)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8955 ++attrs.numsymbols; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8956 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8957 /* Allocate an XpmColorSymbol array. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8958 size = attrs.numsymbols * sizeof *xpm_syms; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8959 xpm_syms = (XpmColorSymbol *) alloca (size); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8960 bzero (xpm_syms, size); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8961 attrs.colorsymbols = xpm_syms; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8962 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8963 /* Fill the color symbol array. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8964 for (tail = color_symbols, i = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8965 CONSP (tail); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8966 ++i, tail = XCDR (tail)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8967 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8968 Lisp_Object name = XCAR (XCAR (tail)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8969 Lisp_Object color = XCDR (XCAR (tail)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8970 xpm_syms[i].name = (char *) alloca (XSTRING (name)->size + 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8971 strcpy (xpm_syms[i].name, XSTRING (name)->data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8972 xpm_syms[i].value = (char *) alloca (XSTRING (color)->size + 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8973 strcpy (xpm_syms[i].value, XSTRING (color)->data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8974 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8975 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8976 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8977 /* Create a pixmap for the image, either from a file, or from a |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8978 string buffer containing data in the same format as an XPM file. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8979 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8980 specified_file = image_spec_value (img->spec, QCfile, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8981 if (STRINGP (specified_file)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8982 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8983 Lisp_Object file = x_find_image_file (specified_file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8984 if (!STRINGP (file)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8985 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8986 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8987 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8988 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8989 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8990 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8991 rc = XpmReadFileToPixmap (NULL, FRAME_W32_WINDOW (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8992 XSTRING (file)->data, &img->pixmap, &img->mask, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8993 &attrs); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8994 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8995 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8996 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8997 Lisp_Object buffer = image_spec_value (img->spec, QCdata, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8998 rc = XpmCreatePixmapFromBuffer (NULL, FRAME_W32_WINDOW (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
8999 XSTRING (buffer)->data, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9000 &img->pixmap, &img->mask, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9001 &attrs); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9002 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9003 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9004 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9005 if (rc == XpmSuccess) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9006 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9007 /* Remember allocated colors. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9008 img->ncolors = attrs.nalloc_pixels; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9009 img->colors = (unsigned long *) xmalloc (img->ncolors |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9010 * sizeof *img->colors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9011 for (i = 0; i < attrs.nalloc_pixels; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9012 img->colors[i] = attrs.alloc_pixels[i]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9013 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9014 img->width = attrs.width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9015 img->height = attrs.height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9016 xassert (img->width > 0 && img->height > 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9017 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9018 /* The call to XpmFreeAttributes below frees attrs.alloc_pixels. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9019 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9020 XpmFreeAttributes (&attrs); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9021 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9022 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9023 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9024 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9025 switch (rc) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9026 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9027 case XpmOpenFailed: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9028 image_error ("Error opening XPM file (%s)", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9029 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9030 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9031 case XpmFileInvalid: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9032 image_error ("Invalid XPM file (%s)", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9033 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9034 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9035 case XpmNoMemory: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9036 image_error ("Out of memory (%s)", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9037 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9038 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9039 case XpmColorFailed: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9040 image_error ("Color allocation error (%s)", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9041 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9042 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9043 default: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9044 image_error ("Unknown error (%s)", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9045 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9046 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9047 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9048 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9049 return rc == XpmSuccess; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9050 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9051 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9052 #endif /* HAVE_XPM != 0 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9053 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9054 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9055 #if 0 /* NTEMACS_TODO : Color tables on W32. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9056 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9057 Color table |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9058 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9059 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9060 /* An entry in the color table mapping an RGB color to a pixel color. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9061 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9062 struct ct_color |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9063 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9064 int r, g, b; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9065 unsigned long pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9066 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9067 /* Next in color table collision list. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9068 struct ct_color *next; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9069 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9070 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9071 /* The bucket vector size to use. Must be prime. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9072 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9073 #define CT_SIZE 101 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9074 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9075 /* Value is a hash of the RGB color given by R, G, and B. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9076 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9077 #define CT_HASH_RGB(R, G, B) (((R) << 16) ^ ((G) << 8) ^ (B)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9078 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9079 /* The color hash table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9080 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9081 struct ct_color **ct_table; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9082 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9083 /* Number of entries in the color table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9084 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9085 int ct_colors_allocated; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9086 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9087 /* Function prototypes. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9088 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9089 static void init_color_table P_ ((void)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9090 static void free_color_table P_ ((void)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9091 static unsigned long *colors_in_color_table P_ ((int *n)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9092 static unsigned long lookup_rgb_color P_ ((struct frame *f, int r, int g, int b)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9093 static unsigned long lookup_pixel_color P_ ((struct frame *f, unsigned long p)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9094 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9095 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9096 /* Initialize the color table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9097 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9098 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9099 init_color_table () |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9100 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9101 int size = CT_SIZE * sizeof (*ct_table); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9102 ct_table = (struct ct_color **) xmalloc (size); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9103 bzero (ct_table, size); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9104 ct_colors_allocated = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9105 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9106 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9107 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9108 /* Free memory associated with the color table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9109 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9110 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9111 free_color_table () |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9112 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9113 int i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9114 struct ct_color *p, *next; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9115 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9116 for (i = 0; i < CT_SIZE; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9117 for (p = ct_table[i]; p; p = next) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9118 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9119 next = p->next; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9120 xfree (p); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9121 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9122 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9123 xfree (ct_table); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9124 ct_table = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9125 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9126 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9127 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9128 /* Value is a pixel color for RGB color R, G, B on frame F. If an |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9129 entry for that color already is in the color table, return the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9130 pixel color of that entry. Otherwise, allocate a new color for R, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9131 G, B, and make an entry in the color table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9132 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9133 static unsigned long |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9134 lookup_rgb_color (f, r, g, b) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9135 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9136 int r, g, b; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9137 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9138 unsigned hash = CT_HASH_RGB (r, g, b); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9139 int i = hash % CT_SIZE; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9140 struct ct_color *p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9141 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9142 for (p = ct_table[i]; p; p = p->next) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9143 if (p->r == r && p->g == g && p->b == b) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9144 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9145 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9146 if (p == NULL) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9147 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9148 COLORREF color; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9149 Colormap cmap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9150 int rc; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9151 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9152 color = PALETTERGB (r, g, b); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9153 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9154 ++ct_colors_allocated; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9155 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9156 p = (struct ct_color *) xmalloc (sizeof *p); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9157 p->r = r; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9158 p->g = g; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9159 p->b = b; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9160 p->pixel = color; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9161 p->next = ct_table[i]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9162 ct_table[i] = p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9163 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9164 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9165 return p->pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9166 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9167 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9168 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9169 /* Look up pixel color PIXEL which is used on frame F in the color |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9170 table. If not already present, allocate it. Value is PIXEL. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9171 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9172 static unsigned long |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9173 lookup_pixel_color (f, pixel) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9174 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9175 unsigned long pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9176 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9177 int i = pixel % CT_SIZE; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9178 struct ct_color *p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9179 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9180 for (p = ct_table[i]; p; p = p->next) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9181 if (p->pixel == pixel) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9182 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9183 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9184 if (p == NULL) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9185 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9186 XColor color; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9187 Colormap cmap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9188 int rc; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9189 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9190 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9191 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9192 cmap = DefaultColormapOfScreen (FRAME_X_SCREEN (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9193 color.pixel = pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9194 XQueryColor (NULL, cmap, &color); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9195 rc = x_alloc_nearest_color (f, cmap, &color); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9196 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9197 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9198 if (rc) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9199 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9200 ++ct_colors_allocated; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9201 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9202 p = (struct ct_color *) xmalloc (sizeof *p); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9203 p->r = color.red; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9204 p->g = color.green; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9205 p->b = color.blue; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9206 p->pixel = pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9207 p->next = ct_table[i]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9208 ct_table[i] = p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9209 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9210 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9211 return FRAME_FOREGROUND_PIXEL (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9212 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9213 return p->pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9214 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9215 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9216 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9217 /* Value is a vector of all pixel colors contained in the color table, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9218 allocated via xmalloc. Set *N to the number of colors. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9219 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9220 static unsigned long * |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9221 colors_in_color_table (n) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9222 int *n; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9223 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9224 int i, j; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9225 struct ct_color *p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9226 unsigned long *colors; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9227 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9228 if (ct_colors_allocated == 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9229 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9230 *n = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9231 colors = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9232 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9233 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9234 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9235 colors = (unsigned long *) xmalloc (ct_colors_allocated |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9236 * sizeof *colors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9237 *n = ct_colors_allocated; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9238 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9239 for (i = j = 0; i < CT_SIZE; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9240 for (p = ct_table[i]; p; p = p->next) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9241 colors[j++] = p->pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9242 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9243 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9244 return colors; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9245 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9246 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9247 #endif /* NTEMACS_TODO */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9248 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9249 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9250 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9251 Algorithms |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9252 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9253 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9254 #if 0 /* NTEMACS_TODO : W32 versions of low level algorithms */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9255 static void x_laplace_write_row P_ ((struct frame *, long *, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9256 int, XImage *, int)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9257 static void x_laplace_read_row P_ ((struct frame *, Colormap, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9258 XColor *, int, XImage *, int)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9259 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9260 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9261 /* Fill COLORS with RGB colors from row Y of image XIMG. F is the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9262 frame we operate on, CMAP is the color-map in effect, and WIDTH is |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9263 the width of one row in the image. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9264 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9265 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9266 x_laplace_read_row (f, cmap, colors, width, ximg, y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9267 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9268 Colormap cmap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9269 XColor *colors; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9270 int width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9271 XImage *ximg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9272 int y; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9273 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9274 int x; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9275 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9276 for (x = 0; x < width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9277 colors[x].pixel = XGetPixel (ximg, x, y); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9278 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9279 XQueryColors (NULL, cmap, colors, width); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9280 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9281 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9282 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9283 /* Write row Y of image XIMG. PIXELS is an array of WIDTH longs |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9284 containing the pixel colors to write. F is the frame we are |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9285 working on. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9286 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9287 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9288 x_laplace_write_row (f, pixels, width, ximg, y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9289 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9290 long *pixels; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9291 int width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9292 XImage *ximg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9293 int y; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9294 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9295 int x; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9296 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9297 for (x = 0; x < width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9298 XPutPixel (ximg, x, y, pixels[x]); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9299 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9300 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9301 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9302 /* Transform image IMG which is used on frame F with a Laplace |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9303 edge-detection algorithm. The result is an image that can be used |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9304 to draw disabled buttons, for example. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9305 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9306 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9307 x_laplace (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9308 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9309 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9310 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9311 #if 0 /* NTEMACS_TODO : W32 version */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9312 Colormap cmap = DefaultColormapOfScreen (FRAME_X_SCREEN (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9313 XImage *ximg, *oimg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9314 XColor *in[3]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9315 long *out; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9316 Pixmap pixmap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9317 int x, y, i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9318 long pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9319 int in_y, out_y, rc; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9320 int mv2 = 45000; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9321 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9322 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9323 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9324 /* Get the X image IMG->pixmap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9325 ximg = XGetImage (NULL, img->pixmap, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9326 0, 0, img->width, img->height, ~0, ZPixmap); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9327 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9328 /* Allocate 3 input rows, and one output row of colors. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9329 for (i = 0; i < 3; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9330 in[i] = (XColor *) alloca (img->width * sizeof (XColor)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9331 out = (long *) alloca (img->width * sizeof (long)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9332 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9333 /* Create an X image for output. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9334 rc = x_create_x_image_and_pixmap (f, img->width, img->height, 0, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9335 &oimg, &pixmap); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9336 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9337 /* Fill first two rows. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9338 x_laplace_read_row (f, cmap, in[0], img->width, ximg, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9339 x_laplace_read_row (f, cmap, in[1], img->width, ximg, 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9340 in_y = 2; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9341 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9342 /* Write first row, all zeros. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9343 init_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9344 pixel = lookup_rgb_color (f, 0, 0, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9345 for (x = 0; x < img->width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9346 out[x] = pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9347 x_laplace_write_row (f, out, img->width, oimg, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9348 out_y = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9349 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9350 for (y = 2; y < img->height; ++y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9351 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9352 int rowa = y % 3; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9353 int rowb = (y + 2) % 3; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9354 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9355 x_laplace_read_row (f, cmap, in[rowa], img->width, ximg, in_y++); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9356 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9357 for (x = 0; x < img->width - 2; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9358 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9359 int r = in[rowa][x].red + mv2 - in[rowb][x + 2].red; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9360 int g = in[rowa][x].green + mv2 - in[rowb][x + 2].green; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9361 int b = in[rowa][x].blue + mv2 - in[rowb][x + 2].blue; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9362 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9363 out[x + 1] = lookup_rgb_color (f, r & 0xffff, g & 0xffff, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9364 b & 0xffff); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9365 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9366 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9367 x_laplace_write_row (f, out, img->width, oimg, out_y++); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9368 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9369 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9370 /* Write last line, all zeros. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9371 for (x = 0; x < img->width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9372 out[x] = pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9373 x_laplace_write_row (f, out, img->width, oimg, out_y); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9374 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9375 /* Free the input image, and free resources of IMG. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9376 XDestroyImage (ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9377 x_clear_image (f, img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9378 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9379 /* Put the output image into pixmap, and destroy it. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9380 x_put_x_image (f, oimg, pixmap, img->width, img->height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9381 x_destroy_x_image (oimg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9382 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9383 /* Remember new pixmap and colors in IMG. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9384 img->pixmap = pixmap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9385 img->colors = colors_in_color_table (&img->ncolors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9386 free_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9387 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9388 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9389 #endif /* NTEMACS_TODO */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9390 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9391 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9392 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9393 /* Build a mask for image IMG which is used on frame F. FILE is the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9394 name of an image file, for error messages. HOW determines how to |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9395 determine the background color of IMG. If it is a list '(R G B)', |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9396 with R, G, and B being integers >= 0, take that as the color of the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9397 background. Otherwise, determine the background color of IMG |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9398 heuristically. Value is non-zero if successful. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9399 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9400 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9401 x_build_heuristic_mask (f, img, how) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9402 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9403 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9404 Lisp_Object how; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9405 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9406 #if 0 /* NTEMACS_TODO : W32 version */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9407 Display *dpy = FRAME_W32_DISPLAY (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9408 XImage *ximg, *mask_img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9409 int x, y, rc, look_at_corners_p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9410 unsigned long bg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9411 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9412 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9413 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9414 /* Create an image and pixmap serving as mask. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9415 rc = x_create_x_image_and_pixmap (f, img->width, img->height, 1, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9416 &mask_img, &img->mask); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9417 if (!rc) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9418 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9419 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9420 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9421 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9422 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9423 /* Get the X image of IMG->pixmap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9424 ximg = XGetImage (dpy, img->pixmap, 0, 0, img->width, img->height, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9425 ~0, ZPixmap); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9426 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9427 /* Determine the background color of ximg. If HOW is `(R G B)' |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9428 take that as color. Otherwise, try to determine the color |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9429 heuristically. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9430 look_at_corners_p = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9431 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9432 if (CONSP (how)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9433 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9434 int rgb[3], i = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9435 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9436 while (i < 3 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9437 && CONSP (how) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9438 && NATNUMP (XCAR (how))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9439 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9440 rgb[i] = XFASTINT (XCAR (how)) & 0xffff; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9441 how = XCDR (how); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9442 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9443 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9444 if (i == 3 && NILP (how)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9445 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9446 char color_name[30]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9447 XColor exact, color; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9448 Colormap cmap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9449 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9450 sprintf (color_name, "#%04x%04x%04x", rgb[0], rgb[1], rgb[2]); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9451 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9452 cmap = DefaultColormapOfScreen (FRAME_X_SCREEN (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9453 if (XLookupColor (dpy, cmap, color_name, &exact, &color)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9454 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9455 bg = color.pixel; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9456 look_at_corners_p = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9457 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9458 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9459 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9460 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9461 if (look_at_corners_p) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9462 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9463 unsigned long corners[4]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9464 int i, best_count; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9465 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9466 /* Get the colors at the corners of ximg. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9467 corners[0] = XGetPixel (ximg, 0, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9468 corners[1] = XGetPixel (ximg, img->width - 1, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9469 corners[2] = XGetPixel (ximg, img->width - 1, img->height - 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9470 corners[3] = XGetPixel (ximg, 0, img->height - 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9471 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9472 /* Choose the most frequently found color as background. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9473 for (i = best_count = 0; i < 4; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9474 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9475 int j, n; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9476 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9477 for (j = n = 0; j < 4; ++j) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9478 if (corners[i] == corners[j]) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9479 ++n; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9480 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9481 if (n > best_count) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9482 bg = corners[i], best_count = n; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9483 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9484 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9485 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9486 /* Set all bits in mask_img to 1 whose color in ximg is different |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9487 from the background color bg. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9488 for (y = 0; y < img->height; ++y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9489 for (x = 0; x < img->width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9490 XPutPixel (mask_img, x, y, XGetPixel (ximg, x, y) != bg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9491 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9492 /* Put mask_img into img->mask. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9493 x_put_x_image (f, mask_img, img->mask, img->width, img->height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9494 x_destroy_x_image (mask_img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9495 XDestroyImage (ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9496 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9497 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9498 #endif /* NTEMACS_TODO */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9499 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9500 return 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9501 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9502 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9503 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9504 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9505 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9506 PBM (mono, gray, color) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9507 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9508 #ifdef HAVE_PBM |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9509 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9510 static int pbm_image_p P_ ((Lisp_Object object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9511 static int pbm_load P_ ((struct frame *f, struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9512 static int pbm_scan_number P_ ((unsigned char **, unsigned char *)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9513 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9514 /* The symbol `pbm' identifying images of this type. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9515 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9516 Lisp_Object Qpbm; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9517 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9518 /* Indices of image specification fields in gs_format, below. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9519 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9520 enum pbm_keyword_index |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9521 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9522 PBM_TYPE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9523 PBM_FILE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9524 PBM_DATA, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9525 PBM_ASCENT, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9526 PBM_MARGIN, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9527 PBM_RELIEF, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9528 PBM_ALGORITHM, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9529 PBM_HEURISTIC_MASK, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9530 PBM_LAST |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9531 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9532 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9533 /* Vector of image_keyword structures describing the format |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9534 of valid user-defined image specifications. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9535 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9536 static struct image_keyword pbm_format[PBM_LAST] = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9537 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9538 {":type", IMAGE_SYMBOL_VALUE, 1}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9539 {":file", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9540 {":data", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9541 {":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9542 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9543 {":relief", IMAGE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9544 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9545 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9546 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9547 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9548 /* Structure describing the image type `pbm'. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9549 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9550 static struct image_type pbm_type = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9551 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9552 &Qpbm, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9553 pbm_image_p, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9554 pbm_load, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9555 x_clear_image, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9556 NULL |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9557 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9558 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9559 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9560 /* Return non-zero if OBJECT is a valid PBM image specification. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9561 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9562 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9563 pbm_image_p (object) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9564 Lisp_Object object; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9565 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9566 struct image_keyword fmt[PBM_LAST]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9567 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9568 bcopy (pbm_format, fmt, sizeof fmt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9569 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9570 if (!parse_image_spec (object, fmt, PBM_LAST, Qpbm) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9571 || (fmt[PBM_ASCENT].count |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9572 && XFASTINT (fmt[PBM_ASCENT].value) > 100)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9573 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9574 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9575 /* Must specify either :data or :file. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9576 return fmt[PBM_DATA].count + fmt[PBM_FILE].count == 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9577 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9578 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9579 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9580 /* Scan a decimal number from *S and return it. Advance *S while |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9581 reading the number. END is the end of the string. Value is -1 at |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9582 end of input. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9583 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9584 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9585 pbm_scan_number (s, end) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9586 unsigned char **s, *end; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9587 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9588 int c, val = -1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9589 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9590 while (*s < end) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9591 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9592 /* Skip white-space. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9593 while (*s < end && (c = *(*s)++, isspace (c))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9594 ; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9595 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9596 if (c == '#') |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9597 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9598 /* Skip comment to end of line. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9599 while (*s < end && (c = *(*s)++, c != '\n')) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9600 ; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9601 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9602 else if (isdigit (c)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9603 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9604 /* Read decimal number. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9605 val = c - '0'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9606 while (*s < end && (c = *(*s)++, isdigit (c))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9607 val = 10 * val + c - '0'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9608 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9609 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9610 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9611 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9612 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9613 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9614 return val; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9615 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9616 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9617 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9618 /* Read FILE into memory. Value is a pointer to a buffer allocated |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9619 with xmalloc holding FILE's contents. Value is null if an error |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9620 occured. *SIZE is set to the size of the file. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9621 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9622 static char * |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9623 pbm_read_file (file, size) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9624 Lisp_Object file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9625 int *size; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9626 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9627 FILE *fp = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9628 char *buf = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9629 struct stat st; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9630 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9631 if (stat (XSTRING (file)->data, &st) == 0 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9632 && (fp = fopen (XSTRING (file)->data, "r")) != NULL |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9633 && (buf = (char *) xmalloc (st.st_size), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9634 fread (buf, 1, st.st_size, fp) == st.st_size)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9635 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9636 *size = st.st_size; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9637 fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9638 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9639 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9640 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9641 if (fp) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9642 fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9643 if (buf) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9644 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9645 xfree (buf); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9646 buf = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9647 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9648 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9649 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9650 return buf; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9651 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9652 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9653 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9654 /* Load PBM image IMG for use on frame F. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9655 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9656 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9657 pbm_load (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9658 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9659 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9660 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9661 int raw_p, x, y; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9662 int width, height, max_color_idx = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9663 XImage *ximg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9664 Lisp_Object file, specified_file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9665 enum {PBM_MONO, PBM_GRAY, PBM_COLOR} type; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9666 struct gcpro gcpro1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9667 unsigned char *contents = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9668 unsigned char *end, *p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9669 int size; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9670 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9671 specified_file = image_spec_value (img->spec, QCfile, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9672 file = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9673 GCPRO1 (file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9674 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9675 if (STRINGP (specified_file)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9676 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9677 file = x_find_image_file (specified_file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9678 if (!STRINGP (file)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9679 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9680 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9681 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9682 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9683 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9684 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9685 contents = pbm_read_file (file, &size); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9686 if (contents == NULL) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9687 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9688 image_error ("Error reading `%s'", file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9689 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9690 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9691 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9692 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9693 p = contents; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9694 end = contents + size; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9695 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9696 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9697 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9698 Lisp_Object data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9699 data = image_spec_value (img->spec, QCdata, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9700 p = XSTRING (data)->data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9701 end = p + STRING_BYTES (XSTRING (data)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9702 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9703 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9704 /* Check magic number. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9705 if (end - p < 2 || *p++ != 'P') |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9706 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9707 image_error ("Not a PBM image: `%s'", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9708 error: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9709 xfree (contents); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9710 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9711 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9712 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9713 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9714 switch (*p++) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9715 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9716 case '1': |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9717 raw_p = 0, type = PBM_MONO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9718 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9719 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9720 case '2': |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9721 raw_p = 0, type = PBM_GRAY; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9722 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9723 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9724 case '3': |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9725 raw_p = 0, type = PBM_COLOR; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9726 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9727 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9728 case '4': |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9729 raw_p = 1, type = PBM_MONO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9730 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9731 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9732 case '5': |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9733 raw_p = 1, type = PBM_GRAY; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9734 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9735 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9736 case '6': |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9737 raw_p = 1, type = PBM_COLOR; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9738 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9739 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9740 default: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9741 image_error ("Not a PBM image: `%s'", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9742 goto error; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9743 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9744 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9745 /* Read width, height, maximum color-component. Characters |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9746 starting with `#' up to the end of a line are ignored. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9747 width = pbm_scan_number (&p, end); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9748 height = pbm_scan_number (&p, end); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9749 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9750 if (type != PBM_MONO) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9751 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9752 max_color_idx = pbm_scan_number (&p, end); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9753 if (raw_p && max_color_idx > 255) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9754 max_color_idx = 255; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9755 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9756 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9757 if (width < 0 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9758 || height < 0 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9759 || (type != PBM_MONO && max_color_idx < 0)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9760 goto error; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9761 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9762 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9763 if (!x_create_x_image_and_pixmap (f, width, height, 0, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9764 &ximg, &img->pixmap)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9765 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9766 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9767 goto error; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9768 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9769 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9770 /* Initialize the color hash table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9771 init_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9772 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9773 if (type == PBM_MONO) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9774 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9775 int c = 0, g; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9776 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9777 for (y = 0; y < height; ++y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9778 for (x = 0; x < width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9779 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9780 if (raw_p) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9781 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9782 if ((x & 7) == 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9783 c = *p++; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9784 g = c & 0x80; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9785 c <<= 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9786 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9787 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9788 g = pbm_scan_number (&p, end); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9789 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9790 XPutPixel (ximg, x, y, (g |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9791 ? FRAME_FOREGROUND_PIXEL (f) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9792 : FRAME_BACKGROUND_PIXEL (f))); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9793 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9794 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9795 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9796 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9797 for (y = 0; y < height; ++y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9798 for (x = 0; x < width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9799 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9800 int r, g, b; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9801 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9802 if (type == PBM_GRAY) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9803 r = g = b = raw_p ? *p++ : pbm_scan_number (&p, end); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9804 else if (raw_p) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9805 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9806 r = *p++; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9807 g = *p++; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9808 b = *p++; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9809 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9810 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9811 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9812 r = pbm_scan_number (&p, end); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9813 g = pbm_scan_number (&p, end); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9814 b = pbm_scan_number (&p, end); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9815 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9816 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9817 if (r < 0 || g < 0 || b < 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9818 { |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
9819 xfree (ximg->data); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9820 ximg->data = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9821 XDestroyImage (ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9822 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9823 image_error ("Invalid pixel value in image `%s'", |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9824 img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9825 goto error; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9826 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9827 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9828 /* RGB values are now in the range 0..max_color_idx. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9829 Scale this to the range 0..0xffff supported by X. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9830 r = (double) r * 65535 / max_color_idx; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9831 g = (double) g * 65535 / max_color_idx; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9832 b = (double) b * 65535 / max_color_idx; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9833 XPutPixel (ximg, x, y, lookup_rgb_color (f, r, g, b)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9834 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9835 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9836 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9837 /* Store in IMG->colors the colors allocated for the image, and |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9838 free the color table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9839 img->colors = colors_in_color_table (&img->ncolors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9840 free_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9841 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9842 /* Put the image into a pixmap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9843 x_put_x_image (f, ximg, img->pixmap, width, height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9844 x_destroy_x_image (ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9845 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9846 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9847 img->width = width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9848 img->height = height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9849 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9850 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9851 xfree (contents); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9852 return 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9853 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9854 #endif /* HAVE_PBM */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9855 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9856 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9857 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9858 PNG |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9859 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9860 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9861 #if HAVE_PNG |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9862 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9863 #include <png.h> |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9864 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9865 /* Function prototypes. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9866 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9867 static int png_image_p P_ ((Lisp_Object object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9868 static int png_load P_ ((struct frame *f, struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9869 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9870 /* The symbol `png' identifying images of this type. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9871 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9872 Lisp_Object Qpng; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9873 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9874 /* Indices of image specification fields in png_format, below. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9875 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9876 enum png_keyword_index |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9877 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9878 PNG_TYPE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9879 PNG_DATA, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9880 PNG_FILE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9881 PNG_ASCENT, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9882 PNG_MARGIN, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9883 PNG_RELIEF, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9884 PNG_ALGORITHM, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9885 PNG_HEURISTIC_MASK, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9886 PNG_LAST |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9887 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9888 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9889 /* Vector of image_keyword structures describing the format |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9890 of valid user-defined image specifications. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9891 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9892 static struct image_keyword png_format[PNG_LAST] = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9893 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9894 {":type", IMAGE_SYMBOL_VALUE, 1}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9895 {":data", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9896 {":file", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9897 {":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9898 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9899 {":relief", IMAGE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9900 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9901 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9902 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9903 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9904 /* Structure describing the image type `png'. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9905 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9906 static struct image_type png_type = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9907 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9908 &Qpng, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9909 png_image_p, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9910 png_load, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9911 x_clear_image, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9912 NULL |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9913 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9914 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9915 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9916 /* Return non-zero if OBJECT is a valid PNG image specification. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9917 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9918 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9919 png_image_p (object) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9920 Lisp_Object object; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9921 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9922 struct image_keyword fmt[PNG_LAST]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9923 bcopy (png_format, fmt, sizeof fmt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9924 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9925 if (!parse_image_spec (object, fmt, PNG_LAST, Qpng) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9926 || (fmt[PNG_ASCENT].count |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9927 && XFASTINT (fmt[PNG_ASCENT].value) > 100)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9928 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9929 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9930 /* Must specify either the :data or :file keyword. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9931 return fmt[PNG_FILE].count + fmt[PNG_DATA].count == 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9932 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9933 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9934 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9935 /* Error and warning handlers installed when the PNG library |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9936 is initialized. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9937 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9938 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9939 my_png_error (png_ptr, msg) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9940 png_struct *png_ptr; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9941 char *msg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9942 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9943 xassert (png_ptr != NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9944 image_error ("PNG error: %s", build_string (msg), Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9945 longjmp (png_ptr->jmpbuf, 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9946 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9947 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9948 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9949 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9950 my_png_warning (png_ptr, msg) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9951 png_struct *png_ptr; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9952 char *msg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9953 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9954 xassert (png_ptr != NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9955 image_error ("PNG warning: %s", build_string (msg), Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9956 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9957 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9958 /* Memory source for PNG decoding. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9959 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9960 struct png_memory_storage |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9961 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9962 unsigned char *bytes; /* The data */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9963 size_t len; /* How big is it? */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9964 int index; /* Where are we? */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9965 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9966 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9967 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9968 /* Function set as reader function when reading PNG image from memory. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9969 PNG_PTR is a pointer to the PNG control structure. Copy LENGTH |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9970 bytes from the input to DATA. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9971 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9972 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9973 png_read_from_memory (png_ptr, data, length) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9974 png_structp png_ptr; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9975 png_bytep data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9976 png_size_t length; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9977 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9978 struct png_memory_storage *tbr |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9979 = (struct png_memory_storage *) png_get_io_ptr (png_ptr); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9980 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9981 if (length > tbr->len - tbr->index) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9982 png_error (png_ptr, "Read error"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9983 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9984 bcopy (tbr->bytes + tbr->index, data, length); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9985 tbr->index = tbr->index + length; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9986 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9987 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9988 /* Load PNG image IMG for use on frame F. Value is non-zero if |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9989 successful. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9990 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9991 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9992 png_load (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9993 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9994 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9995 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9996 Lisp_Object file, specified_file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9997 Lisp_Object specified_data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9998 int x, y, i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
9999 XImage *ximg, *mask_img = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10000 struct gcpro gcpro1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10001 png_struct *png_ptr = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10002 png_info *info_ptr = NULL, *end_info = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10003 FILE *fp = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10004 png_byte sig[8]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10005 png_byte *pixels = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10006 png_byte **rows = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10007 png_uint_32 width, height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10008 int bit_depth, color_type, interlace_type; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10009 png_byte channels; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10010 png_uint_32 row_bytes; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10011 int transparent_p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10012 char *gamma_str; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10013 double screen_gamma, image_gamma; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10014 int intent; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10015 struct png_memory_storage tbr; /* Data to be read */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10016 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10017 /* Find out what file to load. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10018 specified_file = image_spec_value (img->spec, QCfile, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10019 specified_data = image_spec_value (img->spec, QCdata, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10020 file = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10021 GCPRO1 (file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10022 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10023 if (NILP (specified_data)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10024 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10025 file = x_find_image_file (specified_file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10026 if (!STRINGP (file)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10027 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10028 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10029 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10030 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10031 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10032 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10033 /* Open the image file. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10034 fp = fopen (XSTRING (file)->data, "rb"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10035 if (!fp) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10036 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10037 image_error ("Cannot open image file `%s'", file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10038 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10039 fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10040 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10041 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10042 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10043 /* Check PNG signature. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10044 if (fread (sig, 1, sizeof sig, fp) != sizeof sig |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10045 || !png_check_sig (sig, sizeof sig)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10046 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10047 image_error ("Not a PNG file:` %s'", file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10048 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10049 fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10050 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10051 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10052 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10053 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10054 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10055 /* Read from memory. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10056 tbr.bytes = XSTRING (specified_data)->data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10057 tbr.len = STRING_BYTES (XSTRING (specified_data)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10058 tbr.index = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10059 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10060 /* Check PNG signature. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10061 if (tbr.len < sizeof sig |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10062 || !png_check_sig (tbr.bytes, sizeof sig)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10063 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10064 image_error ("Not a PNG image: `%s'", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10065 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10066 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10067 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10068 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10069 /* Need to skip past the signature. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10070 tbr.bytes += sizeof (sig); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10071 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10072 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10073 /* Initialize read and info structs for PNG lib. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10074 png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10075 my_png_error, my_png_warning); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10076 if (!png_ptr) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10077 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10078 if (fp) fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10079 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10080 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10081 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10082 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10083 info_ptr = png_create_info_struct (png_ptr); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10084 if (!info_ptr) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10085 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10086 png_destroy_read_struct (&png_ptr, NULL, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10087 if (fp) fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10088 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10089 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10090 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10091 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10092 end_info = png_create_info_struct (png_ptr); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10093 if (!end_info) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10094 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10095 png_destroy_read_struct (&png_ptr, &info_ptr, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10096 if (fp) fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10097 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10098 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10099 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10100 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10101 /* Set error jump-back. We come back here when the PNG library |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10102 detects an error. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10103 if (setjmp (png_ptr->jmpbuf)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10104 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10105 error: |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10106 if (png_ptr) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10107 png_destroy_read_struct (&png_ptr, &info_ptr, &end_info); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10108 xfree (pixels); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10109 xfree (rows); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10110 if (fp) fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10111 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10112 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10113 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10114 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10115 /* Read image info. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10116 if (!NILP (specified_data)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10117 png_set_read_fn (png_ptr, (void *) &tbr, png_read_from_memory); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10118 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10119 png_init_io (png_ptr, fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10120 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10121 png_set_sig_bytes (png_ptr, sizeof sig); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10122 png_read_info (png_ptr, info_ptr); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10123 png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10124 &interlace_type, NULL, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10125 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10126 /* If image contains simply transparency data, we prefer to |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10127 construct a clipping mask. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10128 if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10129 transparent_p = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10130 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10131 transparent_p = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10132 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10133 /* This function is easier to write if we only have to handle |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10134 one data format: RGB or RGBA with 8 bits per channel. Let's |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10135 transform other formats into that format. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10136 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10137 /* Strip more than 8 bits per channel. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10138 if (bit_depth == 16) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10139 png_set_strip_16 (png_ptr); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10140 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10141 /* Expand data to 24 bit RGB, or 8 bit grayscale, with alpha channel |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10142 if available. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10143 png_set_expand (png_ptr); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10144 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10145 /* Convert grayscale images to RGB. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10146 if (color_type == PNG_COLOR_TYPE_GRAY |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10147 || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10148 png_set_gray_to_rgb (png_ptr); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10149 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10150 /* The value 2.2 is a guess for PC monitors from PNG example.c. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10151 gamma_str = getenv ("SCREEN_GAMMA"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10152 screen_gamma = gamma_str ? atof (gamma_str) : 2.2; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10153 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10154 /* Tell the PNG lib to handle gamma correction for us. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10155 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10156 #if defined(PNG_READ_sRGB_SUPPORTED) || defined(PNG_WRITE_sRGB_SUPPORTED) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10157 if (png_get_sRGB (png_ptr, info_ptr, &intent)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10158 /* There is a special chunk in the image specifying the gamma. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10159 png_set_sRGB (png_ptr, info_ptr, intent); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10160 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10161 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10162 if (png_get_gAMA (png_ptr, info_ptr, &image_gamma)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10163 /* Image contains gamma information. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10164 png_set_gamma (png_ptr, screen_gamma, image_gamma); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10165 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10166 /* Use a default of 0.5 for the image gamma. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10167 png_set_gamma (png_ptr, screen_gamma, 0.5); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10168 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10169 /* Handle alpha channel by combining the image with a background |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10170 color. Do this only if a real alpha channel is supplied. For |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10171 simple transparency, we prefer a clipping mask. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10172 if (!transparent_p) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10173 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10174 png_color_16 *image_background; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10175 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10176 if (png_get_bKGD (png_ptr, info_ptr, &image_background)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10177 /* Image contains a background color with which to |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10178 combine the image. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10179 png_set_background (png_ptr, image_background, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10180 PNG_BACKGROUND_GAMMA_FILE, 1, 1.0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10181 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10182 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10183 /* Image does not contain a background color with which |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10184 to combine the image data via an alpha channel. Use |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10185 the frame's background instead. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10186 XColor color; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10187 Colormap cmap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10188 png_color_16 frame_background; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10189 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10190 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10191 cmap = DefaultColormapOfScreen (FRAME_X_SCREEN (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10192 color.pixel = FRAME_BACKGROUND_PIXEL (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10193 XQueryColor (FRAME_W32_DISPLAY (f), cmap, &color); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10194 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10195 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10196 bzero (&frame_background, sizeof frame_background); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10197 frame_background.red = color.red; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10198 frame_background.green = color.green; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10199 frame_background.blue = color.blue; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10200 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10201 png_set_background (png_ptr, &frame_background, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10202 PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10203 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10204 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10205 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10206 /* Update info structure. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10207 png_read_update_info (png_ptr, info_ptr); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10208 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10209 /* Get number of channels. Valid values are 1 for grayscale images |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10210 and images with a palette, 2 for grayscale images with transparency |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10211 information (alpha channel), 3 for RGB images, and 4 for RGB |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10212 images with alpha channel, i.e. RGBA. If conversions above were |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10213 sufficient we should only have 3 or 4 channels here. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10214 channels = png_get_channels (png_ptr, info_ptr); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10215 xassert (channels == 3 || channels == 4); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10216 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10217 /* Number of bytes needed for one row of the image. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10218 row_bytes = png_get_rowbytes (png_ptr, info_ptr); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10219 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10220 /* Allocate memory for the image. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10221 pixels = (png_byte *) xmalloc (row_bytes * height * sizeof *pixels); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10222 rows = (png_byte **) xmalloc (height * sizeof *rows); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10223 for (i = 0; i < height; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10224 rows[i] = pixels + i * row_bytes; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10225 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10226 /* Read the entire image. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10227 png_read_image (png_ptr, rows); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10228 png_read_end (png_ptr, info_ptr); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10229 if (fp) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10230 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10231 fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10232 fp = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10233 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10234 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10235 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10236 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10237 /* Create the X image and pixmap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10238 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10239 &img->pixmap)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10240 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10241 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10242 goto error; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10243 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10244 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10245 /* Create an image and pixmap serving as mask if the PNG image |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10246 contains an alpha channel. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10247 if (channels == 4 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10248 && !transparent_p |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10249 && !x_create_x_image_and_pixmap (f, width, height, 1, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10250 &mask_img, &img->mask)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10251 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10252 x_destroy_x_image (ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10253 XFreePixmap (FRAME_W32_DISPLAY (f), img->pixmap); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10254 img->pixmap = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10255 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10256 goto error; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10257 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10258 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10259 /* Fill the X image and mask from PNG data. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10260 init_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10261 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10262 for (y = 0; y < height; ++y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10263 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10264 png_byte *p = rows[y]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10265 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10266 for (x = 0; x < width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10267 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10268 unsigned r, g, b; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10269 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10270 r = *p++ << 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10271 g = *p++ << 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10272 b = *p++ << 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10273 XPutPixel (ximg, x, y, lookup_rgb_color (f, r, g, b)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10274 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10275 /* An alpha channel, aka mask channel, associates variable |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10276 transparency with an image. Where other image formats |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10277 support binary transparency---fully transparent or fully |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10278 opaque---PNG allows up to 254 levels of partial transparency. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10279 The PNG library implements partial transparency by combining |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10280 the image with a specified background color. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10281 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10282 I'm not sure how to handle this here nicely: because the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10283 background on which the image is displayed may change, for |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10284 real alpha channel support, it would be necessary to create |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10285 a new image for each possible background. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10286 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10287 What I'm doing now is that a mask is created if we have |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10288 boolean transparency information. Otherwise I'm using |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10289 the frame's background color to combine the image with. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10290 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10291 if (channels == 4) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10292 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10293 if (mask_img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10294 XPutPixel (mask_img, x, y, *p > 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10295 ++p; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10296 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10297 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10298 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10299 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10300 /* Remember colors allocated for this image. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10301 img->colors = colors_in_color_table (&img->ncolors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10302 free_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10303 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10304 /* Clean up. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10305 png_destroy_read_struct (&png_ptr, &info_ptr, &end_info); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10306 xfree (rows); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10307 xfree (pixels); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10308 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10309 img->width = width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10310 img->height = height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10311 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10312 /* Put the image into the pixmap, then free the X image and its buffer. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10313 x_put_x_image (f, ximg, img->pixmap, width, height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10314 x_destroy_x_image (ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10315 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10316 /* Same for the mask. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10317 if (mask_img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10318 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10319 x_put_x_image (f, mask_img, img->mask, img->width, img->height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10320 x_destroy_x_image (mask_img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10321 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10322 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10323 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10324 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10325 return 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10326 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10327 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10328 #endif /* HAVE_PNG != 0 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10329 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10330 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10331 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10332 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10333 JPEG |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10334 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10335 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10336 #if HAVE_JPEG |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10337 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10338 /* Work around a warning about HAVE_STDLIB_H being redefined in |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10339 jconfig.h. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10340 #ifdef HAVE_STDLIB_H |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10341 #define HAVE_STDLIB_H_1 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10342 #undef HAVE_STDLIB_H |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10343 #endif /* HAVE_STLIB_H */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10344 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10345 #include <jpeglib.h> |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10346 #include <jerror.h> |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10347 #include <setjmp.h> |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10348 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10349 #ifdef HAVE_STLIB_H_1 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10350 #define HAVE_STDLIB_H 1 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10351 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10352 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10353 static int jpeg_image_p P_ ((Lisp_Object object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10354 static int jpeg_load P_ ((struct frame *f, struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10355 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10356 /* The symbol `jpeg' identifying images of this type. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10357 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10358 Lisp_Object Qjpeg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10359 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10360 /* Indices of image specification fields in gs_format, below. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10361 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10362 enum jpeg_keyword_index |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10363 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10364 JPEG_TYPE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10365 JPEG_DATA, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10366 JPEG_FILE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10367 JPEG_ASCENT, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10368 JPEG_MARGIN, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10369 JPEG_RELIEF, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10370 JPEG_ALGORITHM, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10371 JPEG_HEURISTIC_MASK, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10372 JPEG_LAST |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10373 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10374 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10375 /* Vector of image_keyword structures describing the format |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10376 of valid user-defined image specifications. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10377 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10378 static struct image_keyword jpeg_format[JPEG_LAST] = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10379 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10380 {":type", IMAGE_SYMBOL_VALUE, 1}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10381 {":data", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10382 {":file", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10383 {":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10384 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10385 {":relief", IMAGE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10386 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10387 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10388 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10389 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10390 /* Structure describing the image type `jpeg'. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10391 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10392 static struct image_type jpeg_type = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10393 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10394 &Qjpeg, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10395 jpeg_image_p, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10396 jpeg_load, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10397 x_clear_image, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10398 NULL |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10399 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10400 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10401 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10402 /* Return non-zero if OBJECT is a valid JPEG image specification. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10403 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10404 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10405 jpeg_image_p (object) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10406 Lisp_Object object; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10407 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10408 struct image_keyword fmt[JPEG_LAST]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10409 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10410 bcopy (jpeg_format, fmt, sizeof fmt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10411 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10412 if (!parse_image_spec (object, fmt, JPEG_LAST, Qjpeg) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10413 || (fmt[JPEG_ASCENT].count |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10414 && XFASTINT (fmt[JPEG_ASCENT].value) > 100)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10415 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10416 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10417 /* Must specify either the :data or :file keyword. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10418 return fmt[JPEG_FILE].count + fmt[JPEG_DATA].count == 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10419 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10420 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10421 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10422 struct my_jpeg_error_mgr |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10423 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10424 struct jpeg_error_mgr pub; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10425 jmp_buf setjmp_buffer; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10426 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10427 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10428 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10429 my_error_exit (cinfo) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10430 j_common_ptr cinfo; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10431 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10432 struct my_jpeg_error_mgr *mgr = (struct my_jpeg_error_mgr *) cinfo->err; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10433 longjmp (mgr->setjmp_buffer, 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10434 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10435 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10436 /* Init source method for JPEG data source manager. Called by |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10437 jpeg_read_header() before any data is actually read. See |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10438 libjpeg.doc from the JPEG lib distribution. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10439 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10440 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10441 our_init_source (cinfo) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10442 j_decompress_ptr cinfo; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10443 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10444 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10445 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10446 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10447 /* Fill input buffer method for JPEG data source manager. Called |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10448 whenever more data is needed. We read the whole image in one step, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10449 so this only adds a fake end of input marker at the end. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10450 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10451 static boolean |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10452 our_fill_input_buffer (cinfo) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10453 j_decompress_ptr cinfo; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10454 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10455 /* Insert a fake EOI marker. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10456 struct jpeg_source_mgr *src = cinfo->src; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10457 static JOCTET buffer[2]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10458 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10459 buffer[0] = (JOCTET) 0xFF; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10460 buffer[1] = (JOCTET) JPEG_EOI; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10461 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10462 src->next_input_byte = buffer; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10463 src->bytes_in_buffer = 2; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10464 return TRUE; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10465 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10466 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10467 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10468 /* Method to skip over NUM_BYTES bytes in the image data. CINFO->src |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10469 is the JPEG data source manager. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10470 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10471 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10472 our_skip_input_data (cinfo, num_bytes) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10473 j_decompress_ptr cinfo; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10474 long num_bytes; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10475 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10476 struct jpeg_source_mgr *src = (struct jpeg_source_mgr *) cinfo->src; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10477 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10478 if (src) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10479 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10480 if (num_bytes > src->bytes_in_buffer) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10481 ERREXIT (cinfo, JERR_INPUT_EOF); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10482 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10483 src->bytes_in_buffer -= num_bytes; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10484 src->next_input_byte += num_bytes; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10485 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10486 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10487 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10488 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10489 /* Method to terminate data source. Called by |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10490 jpeg_finish_decompress() after all data has been processed. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10491 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10492 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10493 our_term_source (cinfo) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10494 j_decompress_ptr cinfo; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10495 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10496 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10497 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10498 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10499 /* Set up the JPEG lib for reading an image from DATA which contains |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10500 LEN bytes. CINFO is the decompression info structure created for |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10501 reading the image. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10502 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10503 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10504 jpeg_memory_src (cinfo, data, len) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10505 j_decompress_ptr cinfo; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10506 JOCTET *data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10507 unsigned int len; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10508 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10509 struct jpeg_source_mgr *src; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10510 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10511 if (cinfo->src == NULL) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10512 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10513 /* First time for this JPEG object? */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10514 cinfo->src = (struct jpeg_source_mgr *) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10515 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10516 sizeof (struct jpeg_source_mgr)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10517 src = (struct jpeg_source_mgr *) cinfo->src; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10518 src->next_input_byte = data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10519 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10520 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10521 src = (struct jpeg_source_mgr *) cinfo->src; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10522 src->init_source = our_init_source; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10523 src->fill_input_buffer = our_fill_input_buffer; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10524 src->skip_input_data = our_skip_input_data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10525 src->resync_to_restart = jpeg_resync_to_restart; /* Use default method. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10526 src->term_source = our_term_source; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10527 src->bytes_in_buffer = len; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10528 src->next_input_byte = data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10529 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10530 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10531 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10532 /* Load image IMG for use on frame F. Patterned after example.c |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10533 from the JPEG lib. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10534 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10535 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10536 jpeg_load (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10537 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10538 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10539 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10540 struct jpeg_decompress_struct cinfo; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10541 struct my_jpeg_error_mgr mgr; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10542 Lisp_Object file, specified_file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10543 Lisp_Object specified_data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10544 FILE *fp = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10545 JSAMPARRAY buffer; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10546 int row_stride, x, y; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10547 XImage *ximg = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10548 int rc; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10549 unsigned long *colors; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10550 int width, height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10551 struct gcpro gcpro1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10552 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10553 /* Open the JPEG file. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10554 specified_file = image_spec_value (img->spec, QCfile, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10555 specified_data = image_spec_value (img->spec, QCdata, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10556 file = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10557 GCPRO1 (file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10558 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10559 if (NILP (specified_data)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10560 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10561 file = x_find_image_file (specified_file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10562 if (!STRINGP (file)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10563 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10564 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10565 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10566 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10567 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10568 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10569 fp = fopen (XSTRING (file)->data, "r"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10570 if (fp == NULL) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10571 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10572 image_error ("Cannot open `%s'", file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10573 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10574 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10575 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10576 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10577 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10578 /* Customize libjpeg's error handling to call my_error_exit when an |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10579 error is detected. This function will perform a longjmp. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10580 mgr.pub.error_exit = my_error_exit; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10581 cinfo.err = jpeg_std_error (&mgr.pub); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10582 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10583 if ((rc = setjmp (mgr.setjmp_buffer)) != 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10584 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10585 if (rc == 1) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10586 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10587 /* Called from my_error_exit. Display a JPEG error. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10588 char buffer[JMSG_LENGTH_MAX]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10589 cinfo.err->format_message ((j_common_ptr) &cinfo, buffer); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10590 image_error ("Error reading JPEG image `%s': %s", img->spec, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10591 build_string (buffer)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10592 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10593 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10594 /* Close the input file and destroy the JPEG object. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10595 if (fp) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10596 fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10597 jpeg_destroy_decompress (&cinfo); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10598 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10599 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10600 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10601 /* If we already have an XImage, free that. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10602 x_destroy_x_image (ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10603 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10604 /* Free pixmap and colors. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10605 x_clear_image (f, img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10606 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10607 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10608 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10609 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10610 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10611 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10612 /* Create the JPEG decompression object. Let it read from fp. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10613 Read the JPEG image header. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10614 jpeg_create_decompress (&cinfo); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10615 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10616 if (NILP (specified_data)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10617 jpeg_stdio_src (&cinfo, fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10618 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10619 jpeg_memory_src (&cinfo, XSTRING (specified_data)->data, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10620 STRING_BYTES (XSTRING (specified_data))); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10621 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10622 jpeg_read_header (&cinfo, TRUE); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10623 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10624 /* Customize decompression so that color quantization will be used. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10625 Start decompression. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10626 cinfo.quantize_colors = TRUE; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10627 jpeg_start_decompress (&cinfo); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10628 width = img->width = cinfo.output_width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10629 height = img->height = cinfo.output_height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10630 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10631 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10632 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10633 /* Create X image and pixmap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10634 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10635 &img->pixmap)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10636 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10637 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10638 longjmp (mgr.setjmp_buffer, 2); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10639 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10640 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10641 /* Allocate colors. When color quantization is used, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10642 cinfo.actual_number_of_colors has been set with the number of |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10643 colors generated, and cinfo.colormap is a two-dimensional array |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10644 of color indices in the range 0..cinfo.actual_number_of_colors. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10645 No more than 255 colors will be generated. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10646 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10647 int i, ir, ig, ib; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10648 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10649 if (cinfo.out_color_components > 2) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10650 ir = 0, ig = 1, ib = 2; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10651 else if (cinfo.out_color_components > 1) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10652 ir = 0, ig = 1, ib = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10653 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10654 ir = 0, ig = 0, ib = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10655 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10656 /* Use the color table mechanism because it handles colors that |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10657 cannot be allocated nicely. Such colors will be replaced with |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10658 a default color, and we don't have to care about which colors |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10659 can be freed safely, and which can't. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10660 init_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10661 colors = (unsigned long *) alloca (cinfo.actual_number_of_colors |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10662 * sizeof *colors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10663 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10664 for (i = 0; i < cinfo.actual_number_of_colors; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10665 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10666 /* Multiply RGB values with 255 because X expects RGB values |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10667 in the range 0..0xffff. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10668 int r = cinfo.colormap[ir][i] << 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10669 int g = cinfo.colormap[ig][i] << 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10670 int b = cinfo.colormap[ib][i] << 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10671 colors[i] = lookup_rgb_color (f, r, g, b); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10672 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10673 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10674 /* Remember those colors actually allocated. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10675 img->colors = colors_in_color_table (&img->ncolors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10676 free_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10677 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10678 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10679 /* Read pixels. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10680 row_stride = width * cinfo.output_components; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10681 buffer = cinfo.mem->alloc_sarray ((j_common_ptr) &cinfo, JPOOL_IMAGE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10682 row_stride, 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10683 for (y = 0; y < height; ++y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10684 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10685 jpeg_read_scanlines (&cinfo, buffer, 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10686 for (x = 0; x < cinfo.output_width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10687 XPutPixel (ximg, x, y, colors[buffer[0][x]]); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10688 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10689 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10690 /* Clean up. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10691 jpeg_finish_decompress (&cinfo); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10692 jpeg_destroy_decompress (&cinfo); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10693 if (fp) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10694 fclose (fp); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10695 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10696 /* Put the image into the pixmap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10697 x_put_x_image (f, ximg, img->pixmap, width, height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10698 x_destroy_x_image (ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10699 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10700 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10701 return 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10702 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10703 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10704 #endif /* HAVE_JPEG */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10705 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10706 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10707 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10708 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10709 TIFF |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10710 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10711 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10712 #if HAVE_TIFF |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10713 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10714 #include <tiffio.h> |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10715 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10716 static int tiff_image_p P_ ((Lisp_Object object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10717 static int tiff_load P_ ((struct frame *f, struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10718 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10719 /* The symbol `tiff' identifying images of this type. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10720 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10721 Lisp_Object Qtiff; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10722 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10723 /* Indices of image specification fields in tiff_format, below. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10724 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10725 enum tiff_keyword_index |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10726 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10727 TIFF_TYPE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10728 TIFF_DATA, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10729 TIFF_FILE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10730 TIFF_ASCENT, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10731 TIFF_MARGIN, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10732 TIFF_RELIEF, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10733 TIFF_ALGORITHM, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10734 TIFF_HEURISTIC_MASK, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10735 TIFF_LAST |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10736 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10737 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10738 /* Vector of image_keyword structures describing the format |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10739 of valid user-defined image specifications. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10740 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10741 static struct image_keyword tiff_format[TIFF_LAST] = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10742 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10743 {":type", IMAGE_SYMBOL_VALUE, 1}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10744 {":data", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10745 {":file", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10746 {":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10747 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10748 {":relief", IMAGE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10749 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10750 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10751 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10752 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10753 /* Structure describing the image type `tiff'. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10754 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10755 static struct image_type tiff_type = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10756 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10757 &Qtiff, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10758 tiff_image_p, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10759 tiff_load, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10760 x_clear_image, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10761 NULL |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10762 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10763 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10764 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10765 /* Return non-zero if OBJECT is a valid TIFF image specification. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10766 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10767 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10768 tiff_image_p (object) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10769 Lisp_Object object; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10770 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10771 struct image_keyword fmt[TIFF_LAST]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10772 bcopy (tiff_format, fmt, sizeof fmt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10773 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10774 if (!parse_image_spec (object, fmt, TIFF_LAST, Qtiff) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10775 || (fmt[TIFF_ASCENT].count |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10776 && XFASTINT (fmt[TIFF_ASCENT].value) > 100)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10777 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10778 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10779 /* Must specify either the :data or :file keyword. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10780 return fmt[TIFF_FILE].count + fmt[TIFF_DATA].count == 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10781 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10782 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10783 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10784 /* Reading from a memory buffer for TIFF images Based on the PNG |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10785 memory source, but we have to provide a lot of extra functions. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10786 Blah. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10787 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10788 We really only need to implement read and seek, but I am not |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10789 convinced that the TIFF library is smart enough not to destroy |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10790 itself if we only hand it the function pointers we need to |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10791 override. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10792 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10793 typedef struct |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10794 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10795 unsigned char *bytes; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10796 size_t len; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10797 int index; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10798 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10799 tiff_memory_source; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10800 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10801 static size_t |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10802 tiff_read_from_memory (data, buf, size) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10803 thandle_t data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10804 tdata_t buf; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10805 tsize_t size; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10806 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10807 tiff_memory_source *src = (tiff_memory_source *) data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10808 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10809 if (size > src->len - src->index) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10810 return (size_t) -1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10811 bcopy (src->bytes + src->index, buf, size); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10812 src->index += size; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10813 return size; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10814 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10815 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10816 static size_t |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10817 tiff_write_from_memory (data, buf, size) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10818 thandle_t data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10819 tdata_t buf; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10820 tsize_t size; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10821 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10822 return (size_t) -1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10823 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10824 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10825 static toff_t |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10826 tiff_seek_in_memory (data, off, whence) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10827 thandle_t data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10828 toff_t off; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10829 int whence; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10830 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10831 tiff_memory_source *src = (tiff_memory_source *) data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10832 int idx; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10833 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10834 switch (whence) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10835 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10836 case SEEK_SET: /* Go from beginning of source. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10837 idx = off; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10838 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10839 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10840 case SEEK_END: /* Go from end of source. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10841 idx = src->len + off; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10842 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10843 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10844 case SEEK_CUR: /* Go from current position. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10845 idx = src->index + off; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10846 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10847 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10848 default: /* Invalid `whence'. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10849 return -1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10850 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10851 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10852 if (idx > src->len || idx < 0) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10853 return -1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10854 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10855 src->index = idx; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10856 return src->index; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10857 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10858 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10859 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10860 tiff_close_memory (data) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10861 thandle_t data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10862 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10863 /* NOOP */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10864 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10865 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10866 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10867 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10868 tiff_mmap_memory (data, pbase, psize) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10869 thandle_t data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10870 tdata_t *pbase; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10871 toff_t *psize; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10872 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10873 /* It is already _IN_ memory. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10874 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10875 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10876 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10877 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10878 tiff_unmap_memory (data, base, size) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10879 thandle_t data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10880 tdata_t base; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10881 toff_t size; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10882 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10883 /* We don't need to do this. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10884 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10885 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10886 static toff_t |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10887 tiff_size_of_memory (data) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10888 thandle_t data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10889 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10890 return ((tiff_memory_source *) data)->len; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10891 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10892 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10893 /* Load TIFF image IMG for use on frame F. Value is non-zero if |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10894 successful. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10895 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10896 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10897 tiff_load (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10898 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10899 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10900 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10901 Lisp_Object file, specified_file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10902 Lisp_Object specified_data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10903 TIFF *tiff; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10904 int width, height, x, y; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10905 uint32 *buf; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10906 int rc; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10907 XImage *ximg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10908 struct gcpro gcpro1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10909 tiff_memory_source memsrc; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10910 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10911 specified_file = image_spec_value (img->spec, QCfile, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10912 specified_data = image_spec_value (img->spec, QCdata, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10913 file = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10914 GCPRO1 (file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10915 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10916 if (NILP (specified_data)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10917 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10918 /* Read from a file */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10919 file = x_find_image_file (specified_file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10920 if (!STRINGP (file)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10921 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10922 image_error ("Cannot find image file `%s'", file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10923 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10924 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10925 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10926 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10927 /* Try to open the image file. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10928 tiff = TIFFOpen (XSTRING (file)->data, "r"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10929 if (tiff == NULL) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10930 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10931 image_error ("Cannot open `%s'", file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10932 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10933 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10934 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10935 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10936 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10937 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10938 /* Memory source! */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10939 memsrc.bytes = XSTRING (specified_data)->data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10940 memsrc.len = STRING_BYTES (XSTRING (specified_data)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10941 memsrc.index = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10942 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10943 tiff = TIFFClientOpen ("memory_source", "r", &memsrc, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10944 (TIFFReadWriteProc) tiff_read_from_memory, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10945 (TIFFReadWriteProc) tiff_write_from_memory, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10946 tiff_seek_in_memory, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10947 tiff_close_memory, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10948 tiff_size_of_memory, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10949 tiff_mmap_memory, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10950 tiff_unmap_memory); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10951 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10952 if (!tiff) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10953 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10954 image_error ("Cannot open memory source for `%s'", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10955 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10956 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10957 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10958 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10959 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10960 /* Get width and height of the image, and allocate a raster buffer |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10961 of width x height 32-bit values. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10962 TIFFGetField (tiff, TIFFTAG_IMAGEWIDTH, &width); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10963 TIFFGetField (tiff, TIFFTAG_IMAGELENGTH, &height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10964 buf = (uint32 *) xmalloc (width * height * sizeof *buf); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10965 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10966 rc = TIFFReadRGBAImage (tiff, width, height, buf, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10967 TIFFClose (tiff); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10968 if (!rc) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10969 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10970 image_error ("Error reading TIFF image `%s'", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10971 xfree (buf); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10972 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10973 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10974 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10975 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10976 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10977 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10978 /* Create the X image and pixmap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10979 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10980 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10981 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10982 xfree (buf); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10983 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10984 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10985 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10986 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10987 /* Initialize the color table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10988 init_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10989 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10990 /* Process the pixel raster. Origin is in the lower-left corner. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10991 for (y = 0; y < height; ++y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10992 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10993 uint32 *row = buf + y * width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10994 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10995 for (x = 0; x < width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10996 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10997 uint32 abgr = row[x]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10998 int r = TIFFGetR (abgr) << 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
10999 int g = TIFFGetG (abgr) << 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11000 int b = TIFFGetB (abgr) << 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11001 XPutPixel (ximg, x, height - 1 - y, lookup_rgb_color (f, r, g, b)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11002 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11003 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11004 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11005 /* Remember the colors allocated for the image. Free the color table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11006 img->colors = colors_in_color_table (&img->ncolors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11007 free_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11008 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11009 /* Put the image into the pixmap, then free the X image and its buffer. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11010 x_put_x_image (f, ximg, img->pixmap, width, height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11011 x_destroy_x_image (ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11012 xfree (buf); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11013 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11014 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11015 img->width = width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11016 img->height = height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11017 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11018 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11019 return 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11020 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11021 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11022 #endif /* HAVE_TIFF != 0 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11023 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11024 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11025 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11026 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11027 GIF |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11028 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11029 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11030 #if HAVE_GIF |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11031 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11032 #include <gif_lib.h> |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11033 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11034 static int gif_image_p P_ ((Lisp_Object object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11035 static int gif_load P_ ((struct frame *f, struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11036 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11037 /* The symbol `gif' identifying images of this type. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11038 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11039 Lisp_Object Qgif; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11040 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11041 /* Indices of image specification fields in gif_format, below. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11042 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11043 enum gif_keyword_index |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11044 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11045 GIF_TYPE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11046 GIF_DATA, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11047 GIF_FILE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11048 GIF_ASCENT, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11049 GIF_MARGIN, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11050 GIF_RELIEF, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11051 GIF_ALGORITHM, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11052 GIF_HEURISTIC_MASK, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11053 GIF_IMAGE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11054 GIF_LAST |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11055 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11056 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11057 /* Vector of image_keyword structures describing the format |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11058 of valid user-defined image specifications. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11059 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11060 static struct image_keyword gif_format[GIF_LAST] = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11061 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11062 {":type", IMAGE_SYMBOL_VALUE, 1}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11063 {":data", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11064 {":file", IMAGE_STRING_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11065 {":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11066 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11067 {":relief", IMAGE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11068 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11069 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11070 {":image", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0} |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11071 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11072 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11073 /* Structure describing the image type `gif'. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11074 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11075 static struct image_type gif_type = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11076 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11077 &Qgif, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11078 gif_image_p, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11079 gif_load, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11080 x_clear_image, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11081 NULL |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11082 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11083 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11084 /* Return non-zero if OBJECT is a valid GIF image specification. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11085 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11086 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11087 gif_image_p (object) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11088 Lisp_Object object; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11089 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11090 struct image_keyword fmt[GIF_LAST]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11091 bcopy (gif_format, fmt, sizeof fmt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11092 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11093 if (!parse_image_spec (object, fmt, GIF_LAST, Qgif) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11094 || (fmt[GIF_ASCENT].count |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11095 && XFASTINT (fmt[GIF_ASCENT].value) > 100)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11096 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11097 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11098 /* Must specify either the :data or :file keyword. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11099 return fmt[GIF_FILE].count + fmt[GIF_DATA].count == 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11100 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11101 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11102 /* Reading a GIF image from memory |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11103 Based on the PNG memory stuff to a certain extent. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11104 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11105 typedef struct |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11106 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11107 unsigned char *bytes; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11108 size_t len; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11109 int index; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11110 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11111 gif_memory_source; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11112 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11113 /* Make the current memory source available to gif_read_from_memory. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11114 It's done this way because not all versions of libungif support |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11115 a UserData field in the GifFileType structure. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11116 static gif_memory_source *current_gif_memory_src; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11117 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11118 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11119 gif_read_from_memory (file, buf, len) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11120 GifFileType *file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11121 GifByteType *buf; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11122 int len; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11123 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11124 gif_memory_source *src = current_gif_memory_src; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11125 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11126 if (len > src->len - src->index) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11127 return -1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11128 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11129 bcopy (src->bytes + src->index, buf, len); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11130 src->index += len; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11131 return len; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11132 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11133 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11134 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11135 /* Load GIF image IMG for use on frame F. Value is non-zero if |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11136 successful. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11137 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11138 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11139 gif_load (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11140 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11141 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11142 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11143 Lisp_Object file, specified_file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11144 Lisp_Object specified_data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11145 int rc, width, height, x, y, i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11146 XImage *ximg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11147 ColorMapObject *gif_color_map; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11148 unsigned long pixel_colors[256]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11149 GifFileType *gif; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11150 struct gcpro gcpro1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11151 Lisp_Object image; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11152 int ino, image_left, image_top, image_width, image_height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11153 gif_memory_source memsrc; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11154 unsigned char *raster; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11155 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11156 specified_file = image_spec_value (img->spec, QCfile, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11157 specified_data = image_spec_value (img->spec, QCdata, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11158 file = Qnil; |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11159 GCPRO1 (file); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11160 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11161 if (NILP (specified_data)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11162 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11163 file = x_find_image_file (specified_file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11164 if (!STRINGP (file)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11165 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11166 image_error ("Cannot find image file `%s'", specified_file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11167 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11168 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11169 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11170 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11171 /* Open the GIF file. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11172 gif = DGifOpenFileName (XSTRING (file)->data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11173 if (gif == NULL) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11174 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11175 image_error ("Cannot open `%s'", file, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11176 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11177 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11178 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11179 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11180 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11181 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11182 /* Read from memory! */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11183 current_gif_memory_src = &memsrc; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11184 memsrc.bytes = XSTRING (specified_data)->data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11185 memsrc.len = STRING_BYTES (XSTRING (specified_data)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11186 memsrc.index = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11187 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11188 gif = DGifOpen(&memsrc, gif_read_from_memory); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11189 if (!gif) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11190 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11191 image_error ("Cannot open memory source `%s'", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11192 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11193 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11194 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11195 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11196 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11197 /* Read entire contents. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11198 rc = DGifSlurp (gif); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11199 if (rc == GIF_ERROR) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11200 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11201 image_error ("Error reading `%s'", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11202 DGifCloseFile (gif); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11203 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11204 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11205 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11206 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11207 image = image_spec_value (img->spec, QCindex, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11208 ino = INTEGERP (image) ? XFASTINT (image) : 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11209 if (ino >= gif->ImageCount) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11210 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11211 image_error ("Invalid image number `%s' in image `%s'", |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11212 image, img->spec); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11213 DGifCloseFile (gif); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11214 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11215 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11216 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11217 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11218 width = img->width = gif->SWidth; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11219 height = img->height = gif->SHeight; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11220 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11221 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11222 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11223 /* Create the X image and pixmap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11224 if (!x_create_x_image_and_pixmap (f, width, height, 0, &ximg, &img->pixmap)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11225 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11226 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11227 DGifCloseFile (gif); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11228 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11229 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11230 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11231 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11232 /* Allocate colors. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11233 gif_color_map = gif->SavedImages[ino].ImageDesc.ColorMap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11234 if (!gif_color_map) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11235 gif_color_map = gif->SColorMap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11236 init_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11237 bzero (pixel_colors, sizeof pixel_colors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11238 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11239 for (i = 0; i < gif_color_map->ColorCount; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11240 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11241 int r = gif_color_map->Colors[i].Red << 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11242 int g = gif_color_map->Colors[i].Green << 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11243 int b = gif_color_map->Colors[i].Blue << 8; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11244 pixel_colors[i] = lookup_rgb_color (f, r, g, b); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11245 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11246 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11247 img->colors = colors_in_color_table (&img->ncolors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11248 free_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11249 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11250 /* Clear the part of the screen image that are not covered by |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11251 the image from the GIF file. Full animated GIF support |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11252 requires more than can be done here (see the gif89 spec, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11253 disposal methods). Let's simply assume that the part |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11254 not covered by a sub-image is in the frame's background color. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11255 image_top = gif->SavedImages[ino].ImageDesc.Top; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11256 image_left = gif->SavedImages[ino].ImageDesc.Left; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11257 image_width = gif->SavedImages[ino].ImageDesc.Width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11258 image_height = gif->SavedImages[ino].ImageDesc.Height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11259 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11260 for (y = 0; y < image_top; ++y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11261 for (x = 0; x < width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11262 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11263 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11264 for (y = image_top + image_height; y < height; ++y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11265 for (x = 0; x < width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11266 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11267 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11268 for (y = image_top; y < image_top + image_height; ++y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11269 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11270 for (x = 0; x < image_left; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11271 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11272 for (x = image_left + image_width; x < width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11273 XPutPixel (ximg, x, y, FRAME_BACKGROUND_PIXEL (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11274 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11275 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11276 /* Read the GIF image into the X image. We use a local variable |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11277 `raster' here because RasterBits below is a char *, and invites |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11278 problems with bytes >= 0x80. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11279 raster = (unsigned char *) gif->SavedImages[ino].RasterBits; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11280 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11281 if (gif->SavedImages[ino].ImageDesc.Interlace) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11282 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11283 static int interlace_start[] = {0, 4, 2, 1}; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11284 static int interlace_increment[] = {8, 8, 4, 2}; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11285 int pass, inc; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11286 int row = interlace_start[0]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11287 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11288 pass = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11289 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11290 for (y = 0; y < image_height; y++) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11291 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11292 if (row >= image_height) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11293 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11294 row = interlace_start[++pass]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11295 while (row >= image_height) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11296 row = interlace_start[++pass]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11297 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11298 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11299 for (x = 0; x < image_width; x++) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11300 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11301 int i = raster[(y * image_width) + x]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11302 XPutPixel (ximg, x + image_left, row + image_top, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11303 pixel_colors[i]); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11304 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11305 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11306 row += interlace_increment[pass]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11307 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11308 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11309 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11310 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11311 for (y = 0; y < image_height; ++y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11312 for (x = 0; x < image_width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11313 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11314 int i = raster[y* image_width + x]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11315 XPutPixel (ximg, x + image_left, y + image_top, pixel_colors[i]); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11316 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11317 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11318 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11319 DGifCloseFile (gif); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11320 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11321 /* Put the image into the pixmap, then free the X image and its buffer. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11322 x_put_x_image (f, ximg, img->pixmap, width, height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11323 x_destroy_x_image (ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11324 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11325 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11326 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11327 return 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11328 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11329 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11330 #endif /* HAVE_GIF != 0 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11331 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11332 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11333 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11334 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11335 Ghostscript |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11336 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11337 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11338 #ifdef HAVE_GHOSTSCRIPT |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11339 static int gs_image_p P_ ((Lisp_Object object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11340 static int gs_load P_ ((struct frame *f, struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11341 static void gs_clear_image P_ ((struct frame *f, struct image *img)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11342 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11343 /* The symbol `postscript' identifying images of this type. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11344 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11345 Lisp_Object Qpostscript; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11346 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11347 /* Keyword symbols. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11348 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11349 Lisp_Object QCloader, QCbounding_box, QCpt_width, QCpt_height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11350 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11351 /* Indices of image specification fields in gs_format, below. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11352 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11353 enum gs_keyword_index |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11354 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11355 GS_TYPE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11356 GS_PT_WIDTH, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11357 GS_PT_HEIGHT, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11358 GS_FILE, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11359 GS_LOADER, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11360 GS_BOUNDING_BOX, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11361 GS_ASCENT, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11362 GS_MARGIN, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11363 GS_RELIEF, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11364 GS_ALGORITHM, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11365 GS_HEURISTIC_MASK, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11366 GS_LAST |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11367 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11368 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11369 /* Vector of image_keyword structures describing the format |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11370 of valid user-defined image specifications. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11371 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11372 static struct image_keyword gs_format[GS_LAST] = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11373 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11374 {":type", IMAGE_SYMBOL_VALUE, 1}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11375 {":pt-width", IMAGE_POSITIVE_INTEGER_VALUE, 1}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11376 {":pt-height", IMAGE_POSITIVE_INTEGER_VALUE, 1}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11377 {":file", IMAGE_STRING_VALUE, 1}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11378 {":loader", IMAGE_FUNCTION_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11379 {":bounding-box", IMAGE_DONT_CHECK_VALUE_TYPE, 1}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11380 {":ascent", IMAGE_NON_NEGATIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11381 {":margin", IMAGE_POSITIVE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11382 {":relief", IMAGE_INTEGER_VALUE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11383 {":algorithm", IMAGE_DONT_CHECK_VALUE_TYPE, 0}, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11384 {":heuristic-mask", IMAGE_DONT_CHECK_VALUE_TYPE, 0} |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11385 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11386 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11387 /* Structure describing the image type `ghostscript'. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11388 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11389 static struct image_type gs_type = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11390 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11391 &Qpostscript, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11392 gs_image_p, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11393 gs_load, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11394 gs_clear_image, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11395 NULL |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11396 }; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11397 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11398 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11399 /* Free X resources of Ghostscript image IMG which is used on frame F. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11400 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11401 static void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11402 gs_clear_image (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11403 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11404 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11405 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11406 /* IMG->data.ptr_val may contain a recorded colormap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11407 xfree (img->data.ptr_val); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11408 x_clear_image (f, img); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11409 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11410 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11411 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11412 /* Return non-zero if OBJECT is a valid Ghostscript image |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11413 specification. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11414 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11415 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11416 gs_image_p (object) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11417 Lisp_Object object; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11418 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11419 struct image_keyword fmt[GS_LAST]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11420 Lisp_Object tem; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11421 int i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11422 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11423 bcopy (gs_format, fmt, sizeof fmt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11424 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11425 if (!parse_image_spec (object, fmt, GS_LAST, Qpostscript) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11426 || (fmt[GS_ASCENT].count |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11427 && XFASTINT (fmt[GS_ASCENT].value) > 100)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11428 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11429 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11430 /* Bounding box must be a list or vector containing 4 integers. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11431 tem = fmt[GS_BOUNDING_BOX].value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11432 if (CONSP (tem)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11433 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11434 for (i = 0; i < 4; ++i, tem = XCDR (tem)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11435 if (!CONSP (tem) || !INTEGERP (XCAR (tem))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11436 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11437 if (!NILP (tem)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11438 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11439 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11440 else if (VECTORP (tem)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11441 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11442 if (XVECTOR (tem)->size != 4) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11443 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11444 for (i = 0; i < 4; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11445 if (!INTEGERP (XVECTOR (tem)->contents[i])) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11446 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11447 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11448 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11449 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11450 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11451 return 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11452 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11453 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11454 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11455 /* Load Ghostscript image IMG for use on frame F. Value is non-zero |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11456 if successful. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11457 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11458 static int |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11459 gs_load (f, img) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11460 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11461 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11462 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11463 char buffer[100]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11464 Lisp_Object window_and_pixmap_id = Qnil, loader, pt_height, pt_width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11465 struct gcpro gcpro1, gcpro2; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11466 Lisp_Object frame; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11467 double in_width, in_height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11468 Lisp_Object pixel_colors = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11469 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11470 /* Compute pixel size of pixmap needed from the given size in the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11471 image specification. Sizes in the specification are in pt. 1 pt |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11472 = 1/72 in, xdpi and ydpi are stored in the frame's X display |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11473 info. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11474 pt_width = image_spec_value (img->spec, QCpt_width, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11475 in_width = XFASTINT (pt_width) / 72.0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11476 img->width = in_width * FRAME_W32_DISPLAY_INFO (f)->resx; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11477 pt_height = image_spec_value (img->spec, QCpt_height, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11478 in_height = XFASTINT (pt_height) / 72.0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11479 img->height = in_height * FRAME_W32_DISPLAY_INFO (f)->resy; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11480 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11481 /* Create the pixmap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11482 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11483 xassert (img->pixmap == 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11484 img->pixmap = XCreatePixmap (FRAME_W32_DISPLAY (f), FRAME_W32_WINDOW (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11485 img->width, img->height, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11486 DefaultDepthOfScreen (FRAME_X_SCREEN (f))); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11487 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11488 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11489 if (!img->pixmap) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11490 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11491 image_error ("Unable to create pixmap for `%s'", img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11492 return 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11493 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11494 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11495 /* Call the loader to fill the pixmap. It returns a process object |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11496 if successful. We do not record_unwind_protect here because |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11497 other places in redisplay like calling window scroll functions |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11498 don't either. Let the Lisp loader use `unwind-protect' instead. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11499 GCPRO2 (window_and_pixmap_id, pixel_colors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11500 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11501 sprintf (buffer, "%lu %lu", |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11502 (unsigned long) FRAME_W32_WINDOW (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11503 (unsigned long) img->pixmap); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11504 window_and_pixmap_id = build_string (buffer); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11505 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11506 sprintf (buffer, "%lu %lu", |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11507 FRAME_FOREGROUND_PIXEL (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11508 FRAME_BACKGROUND_PIXEL (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11509 pixel_colors = build_string (buffer); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11510 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11511 XSETFRAME (frame, f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11512 loader = image_spec_value (img->spec, QCloader, NULL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11513 if (NILP (loader)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11514 loader = intern ("gs-load-image"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11515 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11516 img->data.lisp_val = call6 (loader, frame, img->spec, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11517 make_number (img->width), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11518 make_number (img->height), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11519 window_and_pixmap_id, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11520 pixel_colors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11521 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11522 return PROCESSP (img->data.lisp_val); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11523 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11524 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11525 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11526 /* Kill the Ghostscript process that was started to fill PIXMAP on |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11527 frame F. Called from XTread_socket when receiving an event |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11528 telling Emacs that Ghostscript has finished drawing. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11529 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11530 void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11531 x_kill_gs_process (pixmap, f) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11532 Pixmap pixmap; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11533 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11534 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11535 struct image_cache *c = FRAME_X_IMAGE_CACHE (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11536 int class, i; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11537 struct image *img; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11538 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11539 /* Find the image containing PIXMAP. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11540 for (i = 0; i < c->used; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11541 if (c->images[i]->pixmap == pixmap) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11542 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11543 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11544 /* Kill the GS process. We should have found PIXMAP in the image |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11545 cache and its image should contain a process object. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11546 xassert (i < c->used); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11547 img = c->images[i]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11548 xassert (PROCESSP (img->data.lisp_val)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11549 Fkill_process (img->data.lisp_val, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11550 img->data.lisp_val = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11551 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11552 /* On displays with a mutable colormap, figure out the colors |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11553 allocated for the image by looking at the pixels of an XImage for |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11554 img->pixmap. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11555 class = FRAME_W32_DISPLAY_INFO (f)->visual->class; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11556 if (class != StaticColor && class != StaticGray && class != TrueColor) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11557 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11558 XImage *ximg; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11559 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11560 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11561 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11562 /* Try to get an XImage for img->pixmep. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11563 ximg = XGetImage (FRAME_W32_DISPLAY (f), img->pixmap, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11564 0, 0, img->width, img->height, ~0, ZPixmap); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11565 if (ximg) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11566 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11567 int x, y; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11568 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11569 /* Initialize the color table. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11570 init_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11571 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11572 /* For each pixel of the image, look its color up in the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11573 color table. After having done so, the color table will |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11574 contain an entry for each color used by the image. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11575 for (y = 0; y < img->height; ++y) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11576 for (x = 0; x < img->width; ++x) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11577 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11578 unsigned long pixel = XGetPixel (ximg, x, y); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11579 lookup_pixel_color (f, pixel); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11580 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11581 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11582 /* Record colors in the image. Free color table and XImage. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11583 img->colors = colors_in_color_table (&img->ncolors); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11584 free_color_table (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11585 XDestroyImage (ximg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11586 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11587 #if 0 /* This doesn't seem to be the case. If we free the colors |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11588 here, we get a BadAccess later in x_clear_image when |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11589 freeing the colors. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11590 /* We have allocated colors once, but Ghostscript has also |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11591 allocated colors on behalf of us. So, to get the |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11592 reference counts right, free them once. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11593 if (img->ncolors) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11594 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11595 Colormap cmap = DefaultColormapOfScreen (FRAME_X_SCREEN (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11596 XFreeColors (FRAME_W32_DISPLAY (f), cmap, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11597 img->colors, img->ncolors, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11598 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11599 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11600 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11601 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11602 image_error ("Cannot get X image of `%s'; colors will not be freed", |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11603 img->spec, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11604 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11605 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11606 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11607 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11608 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11609 #endif /* HAVE_GHOSTSCRIPT */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11610 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11611 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11612 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11613 Window properties |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11614 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11615 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11616 DEFUN ("x-change-window-property", Fx_change_window_property, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11617 Sx_change_window_property, 2, 3, 0, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11618 "Change window property PROP to VALUE on the X window of FRAME.\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11619 PROP and VALUE must be strings. FRAME nil or omitted means use the\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11620 selected frame. Value is VALUE.") |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11621 (prop, value, frame) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11622 Lisp_Object frame, prop, value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11623 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11624 #if 0 /* NTEMACS_TODO : port window properties to W32 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11625 struct frame *f = check_x_frame (frame); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11626 Atom prop_atom; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11627 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11628 CHECK_STRING (prop, 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11629 CHECK_STRING (value, 2); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11630 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11631 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11632 prop_atom = XInternAtom (FRAME_W32_DISPLAY (f), XSTRING (prop)->data, False); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11633 XChangeProperty (FRAME_W32_DISPLAY (f), FRAME_W32_WINDOW (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11634 prop_atom, XA_STRING, 8, PropModeReplace, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11635 XSTRING (value)->data, XSTRING (value)->size); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11636 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11637 /* Make sure the property is set when we return. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11638 XFlush (FRAME_W32_DISPLAY (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11639 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11640 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11641 #endif /* NTEMACS_TODO */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11642 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11643 return value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11644 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11645 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11646 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11647 DEFUN ("x-delete-window-property", Fx_delete_window_property, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11648 Sx_delete_window_property, 1, 2, 0, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11649 "Remove window property PROP from X window of FRAME.\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11650 FRAME nil or omitted means use the selected frame. Value is PROP.") |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11651 (prop, frame) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11652 Lisp_Object prop, frame; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11653 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11654 #if 0 /* NTEMACS_TODO : port window properties to W32 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11655 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11656 struct frame *f = check_x_frame (frame); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11657 Atom prop_atom; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11658 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11659 CHECK_STRING (prop, 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11660 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11661 prop_atom = XInternAtom (FRAME_W32_DISPLAY (f), XSTRING (prop)->data, False); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11662 XDeleteProperty (FRAME_W32_DISPLAY (f), FRAME_W32_WINDOW (f), prop_atom); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11663 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11664 /* Make sure the property is removed when we return. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11665 XFlush (FRAME_W32_DISPLAY (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11666 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11667 #endif /* NTEMACS_TODO */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11668 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11669 return prop; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11670 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11671 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11672 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11673 DEFUN ("x-window-property", Fx_window_property, Sx_window_property, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11674 1, 2, 0, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11675 "Value is the value of window property PROP on FRAME.\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11676 If FRAME is nil or omitted, use the selected frame. Value is nil\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11677 if FRAME hasn't a property with name PROP or if PROP has no string\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11678 value.") |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11679 (prop, frame) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11680 Lisp_Object prop, frame; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11681 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11682 #if 0 /* NTEMACS_TODO : port window properties to W32 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11683 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11684 struct frame *f = check_x_frame (frame); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11685 Atom prop_atom; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11686 int rc; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11687 Lisp_Object prop_value = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11688 char *tmp_data = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11689 Atom actual_type; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11690 int actual_format; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11691 unsigned long actual_size, bytes_remaining; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11692 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11693 CHECK_STRING (prop, 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11694 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11695 prop_atom = XInternAtom (FRAME_W32_DISPLAY (f), XSTRING (prop)->data, False); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11696 rc = XGetWindowProperty (FRAME_W32_DISPLAY (f), FRAME_W32_WINDOW (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11697 prop_atom, 0, 0, False, XA_STRING, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11698 &actual_type, &actual_format, &actual_size, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11699 &bytes_remaining, (unsigned char **) &tmp_data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11700 if (rc == Success) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11701 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11702 int size = bytes_remaining; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11703 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11704 XFree (tmp_data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11705 tmp_data = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11706 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11707 rc = XGetWindowProperty (FRAME_W32_DISPLAY (f), FRAME_W32_WINDOW (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11708 prop_atom, 0, bytes_remaining, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11709 False, XA_STRING, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11710 &actual_type, &actual_format, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11711 &actual_size, &bytes_remaining, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11712 (unsigned char **) &tmp_data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11713 if (rc == Success) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11714 prop_value = make_string (tmp_data, size); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11715 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11716 XFree (tmp_data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11717 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11718 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11719 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11720 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11721 return prop_value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11722 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11723 #endif /* NTEMACS_TODO */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11724 return Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11725 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11726 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11727 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11728 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11729 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11730 Busy cursor |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11731 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11732 |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11733 /* If non-null, an asynchronous timer that, when it expires, displays |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11734 a busy cursor on all frames. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11735 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11736 static struct atimer *busy_cursor_atimer; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11737 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11738 /* Non-zero means a busy cursor is currently shown. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11739 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11740 static int busy_cursor_shown_p; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11741 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11742 /* Number of seconds to wait before displaying a busy cursor. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11743 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11744 static Lisp_Object Vbusy_cursor_delay; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11745 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11746 /* Default number of seconds to wait before displaying a busy |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11747 cursor. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11748 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11749 #define DEFAULT_BUSY_CURSOR_DELAY 1 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11750 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11751 /* Function prototypes. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11752 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11753 static void show_busy_cursor P_ ((struct atimer *)); |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11754 static void hide_busy_cursor P_ ((void)); |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11755 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11756 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11757 /* Cancel a currently active busy-cursor timer, and start a new one. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11758 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11759 void |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11760 start_busy_cursor () |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11761 { |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11762 #if 0 /* NTEMACS_TODO: cursor shape changes. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11763 EMACS_TIME delay; |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11764 int secs, usecs = 0; |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11765 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11766 cancel_busy_cursor (); |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11767 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11768 if (INTEGERP (Vbusy_cursor_delay) |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11769 && XINT (Vbusy_cursor_delay) > 0) |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11770 secs = XFASTINT (Vbusy_cursor_delay); |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11771 else if (FLOATP (Vbusy_cursor_delay) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11772 && XFLOAT_DATA (Vbusy_cursor_delay) > 0) |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11773 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11774 Lisp_Object tem; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11775 tem = Ftruncate (Vbusy_cursor_delay, Qnil); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11776 secs = XFASTINT (tem); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11777 usecs = (XFLOAT_DATA (Vbusy_cursor_delay) - secs) * 1000000; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11778 } |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11779 else |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11780 secs = DEFAULT_BUSY_CURSOR_DELAY; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11781 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11782 EMACS_SET_SECS_USECS (delay, secs, usecs); |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11783 busy_cursor_atimer = start_atimer (ATIMER_RELATIVE, delay, |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11784 show_busy_cursor, NULL); |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11785 #endif |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11786 } |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11787 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11788 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11789 /* Cancel the busy cursor timer if active, hide a busy cursor if |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11790 shown. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11791 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11792 void |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11793 cancel_busy_cursor () |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11794 { |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11795 if (busy_cursor_atimer) |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11796 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11797 cancel_atimer (busy_cursor_atimer); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11798 busy_cursor_atimer = NULL; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11799 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
11800 |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11801 if (busy_cursor_shown_p) |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11802 hide_busy_cursor (); |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11803 } |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11804 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11805 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11806 /* Timer function of busy_cursor_atimer. TIMER is equal to |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11807 busy_cursor_atimer. |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11808 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11809 Display a busy cursor on all frames by mapping the frames' |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11810 busy_window. Set the busy_p flag in the frames' output_data.x |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11811 structure to indicate that a busy cursor is shown on the |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11812 frames. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11813 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11814 static void |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11815 show_busy_cursor (timer) |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11816 struct atimer *timer; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11817 { |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11818 #if 0 /* NTEMACS_TODO: cursor shape changes. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11819 /* The timer implementation will cancel this timer automatically |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11820 after this function has run. Set busy_cursor_atimer to null |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11821 so that we know the timer doesn't have to be canceled. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11822 busy_cursor_atimer = NULL; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11823 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11824 if (!busy_cursor_shown_p) |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11825 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11826 Lisp_Object rest, frame; |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11827 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11828 BLOCK_INPUT; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11829 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11830 FOR_EACH_FRAME (rest, frame) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11831 if (FRAME_X_P (XFRAME (frame))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11832 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11833 struct frame *f = XFRAME (frame); |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11834 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11835 f->output_data.w32->busy_p = 1; |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11836 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11837 if (!f->output_data.w32->busy_window) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11838 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11839 unsigned long mask = CWCursor; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11840 XSetWindowAttributes attrs; |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11841 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11842 attrs.cursor = f->output_data.w32->busy_cursor; |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11843 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11844 f->output_data.w32->busy_window |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11845 = XCreateWindow (FRAME_X_DISPLAY (f), |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11846 FRAME_OUTER_WINDOW (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11847 0, 0, 32000, 32000, 0, 0, |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11848 InputOnly, |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11849 CopyFromParent, |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11850 mask, &attrs); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11851 } |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11852 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11853 XMapRaised (FRAME_X_DISPLAY (f), f->output_data.w32->busy_window); |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11854 XFlush (FRAME_X_DISPLAY (f)); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11855 } |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11856 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11857 busy_cursor_shown_p = 1; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11858 UNBLOCK_INPUT; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11859 } |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11860 #endif |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11861 } |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11862 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11863 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11864 /* Hide the busy cursor on all frames, if it is currently shown. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11865 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11866 static void |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11867 hide_busy_cursor () |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11868 { |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11869 #if 0 /* NTEMACS_TODO: cursor shape changes. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11870 if (busy_cursor_shown_p) |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11871 { |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11872 Lisp_Object rest, frame; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11873 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11874 BLOCK_INPUT; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11875 FOR_EACH_FRAME (rest, frame) |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11876 { |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11877 struct frame *f = XFRAME (frame); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11878 |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11879 if (FRAME_X_P (f) |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11880 /* Watch out for newly created frames. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11881 && f->output_data.x->busy_window) |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11882 { |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11883 XUnmapWindow (FRAME_X_DISPLAY (f), f->output_data.x->busy_window); |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11884 /* Sync here because XTread_socket looks at the busy_p flag |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11885 that is reset to zero below. */ |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11886 XSync (FRAME_X_DISPLAY (f), False); |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11887 f->output_data.x->busy_p = 0; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11888 } |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11889 } |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11890 |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11891 busy_cursor_shown_p = 0; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11892 UNBLOCK_INPUT; |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
11893 } |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11894 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11895 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11896 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11897 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11898 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11899 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11900 Tool tips |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11901 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11902 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11903 static Lisp_Object x_create_tip_frame P_ ((struct w32_display_info *, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11904 Lisp_Object)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11905 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11906 /* The frame of a currently visible tooltip, or null. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11907 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11908 struct frame *tip_frame; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11909 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11910 /* If non-nil, a timer started that hides the last tooltip when it |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11911 fires. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11912 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11913 Lisp_Object tip_timer; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11914 Window tip_window; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11915 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11916 /* Create a frame for a tooltip on the display described by DPYINFO. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11917 PARMS is a list of frame parameters. Value is the frame. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11918 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11919 static Lisp_Object |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11920 x_create_tip_frame (dpyinfo, parms) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11921 struct w32_display_info *dpyinfo; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11922 Lisp_Object parms; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11923 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11924 #if 0 /* NTEMACS_TODO : w32 version */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11925 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11926 Lisp_Object frame, tem; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11927 Lisp_Object name; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11928 long window_prompting = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11929 int width, height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11930 int count = specpdl_ptr - specpdl; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11931 struct gcpro gcpro1, gcpro2, gcpro3; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11932 struct kboard *kb; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11933 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11934 check_x (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11935 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11936 /* Use this general default value to start with until we know if |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11937 this frame has a specified name. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11938 Vx_resource_name = Vinvocation_name; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11939 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11940 #ifdef MULTI_KBOARD |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11941 kb = dpyinfo->kboard; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11942 #else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11943 kb = &the_only_kboard; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11944 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11945 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11946 /* Get the name of the frame to use for resource lookup. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11947 name = w32_get_arg (parms, Qname, "name", "Name", RES_TYPE_STRING); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11948 if (!STRINGP (name) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11949 && !EQ (name, Qunbound) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11950 && !NILP (name)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11951 error ("Invalid frame name--not a string or nil"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11952 Vx_resource_name = name; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11953 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11954 frame = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11955 GCPRO3 (parms, name, frame); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11956 tip_frame = f = make_frame (1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11957 XSETFRAME (frame, f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11958 FRAME_CAN_HAVE_SCROLL_BARS (f) = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11959 |
27516
8001542eaee2
(w32_defined_color): Check for valid frame before
Jason Rumney <jasonr@gnu.org>
parents:
27407
diff
changeset
|
11960 f->output_method = output_w32; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11961 f->output_data.w32 = |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11962 (struct w32_output *) xmalloc (sizeof (struct w32_output)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11963 bzero (f->output_data.w32, sizeof (struct w32_output)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11964 #if 0 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11965 f->output_data.w32->icon_bitmap = -1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11966 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11967 f->output_data.w32->fontset = -1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11968 f->icon_name = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11969 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11970 #ifdef MULTI_KBOARD |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11971 FRAME_KBOARD (f) = kb; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11972 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11973 f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11974 f->output_data.w32->explicit_parent = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11975 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11976 /* Set the name; the functions to which we pass f expect the name to |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11977 be set. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11978 if (EQ (name, Qunbound) || NILP (name)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11979 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11980 f->name = build_string (dpyinfo->x_id_name); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11981 f->explicit_name = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11982 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11983 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11984 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11985 f->name = name; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11986 f->explicit_name = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11987 /* use the frame's title when getting resources for this frame. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11988 specbind (Qx_resource_name, name); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11989 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11990 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11991 /* Extract the window parameters from the supplied values |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11992 that are needed to determine window geometry. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11993 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11994 Lisp_Object font; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11995 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11996 font = w32_get_arg (parms, Qfont, "font", "Font", RES_TYPE_STRING); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11997 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11998 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
11999 /* First, try whatever font the caller has specified. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12000 if (STRINGP (font)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12001 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12002 tem = Fquery_fontset (font, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12003 if (STRINGP (tem)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12004 font = x_new_fontset (f, XSTRING (tem)->data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12005 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12006 font = x_new_font (f, XSTRING (font)->data); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12007 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12008 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12009 /* Try out a font which we hope has bold and italic variations. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12010 if (!STRINGP (font)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12011 font = x_new_font (f, "-adobe-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-1"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12012 if (!STRINGP (font)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12013 font = x_new_font (f, "-misc-fixed-medium-r-normal-*-*-140-*-*-c-*-iso8859-1"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12014 if (! STRINGP (font)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12015 font = x_new_font (f, "-*-*-medium-r-normal-*-*-140-*-*-c-*-iso8859-1"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12016 if (! STRINGP (font)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12017 /* This was formerly the first thing tried, but it finds too many fonts |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12018 and takes too long. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12019 font = x_new_font (f, "-*-*-medium-r-*-*-*-*-*-*-c-*-iso8859-1"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12020 /* If those didn't work, look for something which will at least work. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12021 if (! STRINGP (font)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12022 font = x_new_font (f, "-*-fixed-*-*-*-*-*-140-*-*-c-*-iso8859-1"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12023 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12024 if (! STRINGP (font)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12025 font = build_string ("fixed"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12026 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12027 x_default_parameter (f, parms, Qfont, font, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12028 "font", "Font", RES_TYPE_STRING); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12029 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12030 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12031 x_default_parameter (f, parms, Qborder_width, make_number (2), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12032 "borderWidth", "BorderWidth", RES_TYPE_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12033 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12034 /* This defaults to 2 in order to match xterm. We recognize either |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12035 internalBorderWidth or internalBorder (which is what xterm calls |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12036 it). */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12037 if (NILP (Fassq (Qinternal_border_width, parms))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12038 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12039 Lisp_Object value; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12040 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12041 value = w32_get_arg (parms, Qinternal_border_width, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12042 "internalBorder", "internalBorder", RES_TYPE_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12043 if (! EQ (value, Qunbound)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12044 parms = Fcons (Fcons (Qinternal_border_width, value), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12045 parms); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12046 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12047 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12048 x_default_parameter (f, parms, Qinternal_border_width, make_number (1), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12049 "internalBorderWidth", "internalBorderWidth", |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12050 RES_TYPE_NUMBER); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12051 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12052 /* Also do the stuff which must be set before the window exists. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12053 x_default_parameter (f, parms, Qforeground_color, build_string ("black"), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12054 "foreground", "Foreground", RES_TYPE_STRING); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12055 x_default_parameter (f, parms, Qbackground_color, build_string ("white"), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12056 "background", "Background", RES_TYPE_STRING); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12057 x_default_parameter (f, parms, Qmouse_color, build_string ("black"), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12058 "pointerColor", "Foreground", RES_TYPE_STRING); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12059 x_default_parameter (f, parms, Qcursor_color, build_string ("black"), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12060 "cursorColor", "Foreground", RES_TYPE_STRING); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12061 x_default_parameter (f, parms, Qborder_color, build_string ("black"), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12062 "borderColor", "BorderColor", RES_TYPE_STRING); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12063 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12064 /* Init faces before x_default_parameter is called for scroll-bar |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12065 parameters because that function calls x_set_scroll_bar_width, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12066 which calls change_frame_size, which calls Fset_window_buffer, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12067 which runs hooks, which call Fvertical_motion. At the end, we |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12068 end up in init_iterator with a null face cache, which should not |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12069 happen. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12070 init_frame_faces (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12071 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12072 f->output_data.w32->parent_desc = FRAME_W32_DISPLAY_INFO (f)->root_window; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12073 window_prompting = x_figure_window_size (f, parms); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12074 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12075 if (window_prompting & XNegative) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12076 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12077 if (window_prompting & YNegative) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12078 f->output_data.w32->win_gravity = SouthEastGravity; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12079 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12080 f->output_data.w32->win_gravity = NorthEastGravity; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12081 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12082 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12083 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12084 if (window_prompting & YNegative) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12085 f->output_data.w32->win_gravity = SouthWestGravity; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12086 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12087 f->output_data.w32->win_gravity = NorthWestGravity; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12088 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12089 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12090 f->output_data.w32->size_hint_flags = window_prompting; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12091 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12092 XSetWindowAttributes attrs; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12093 unsigned long mask; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12094 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12095 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12096 mask = CWBackPixel | CWOverrideRedirect | CWSaveUnder | CWEventMask; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12097 /* Window managers looks at the override-redirect flag to |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12098 determine whether or net to give windows a decoration (Xlib |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12099 3.2.8). */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12100 attrs.override_redirect = True; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12101 attrs.save_under = True; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12102 attrs.background_pixel = FRAME_BACKGROUND_PIXEL (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12103 /* Arrange for getting MapNotify and UnmapNotify events. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12104 attrs.event_mask = StructureNotifyMask; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12105 tip_window |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12106 = FRAME_W32_WINDOW (f) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12107 = XCreateWindow (FRAME_W32_DISPLAY (f), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12108 FRAME_W32_DISPLAY_INFO (f)->root_window, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12109 /* x, y, width, height */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12110 0, 0, 1, 1, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12111 /* Border. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12112 1, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12113 CopyFromParent, InputOutput, CopyFromParent, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12114 mask, &attrs); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12115 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12116 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12117 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12118 x_make_gc (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12119 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12120 x_default_parameter (f, parms, Qauto_raise, Qnil, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12121 "autoRaise", "AutoRaiseLower", RES_TYPE_BOOLEAN); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12122 x_default_parameter (f, parms, Qauto_lower, Qnil, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12123 "autoLower", "AutoRaiseLower", RES_TYPE_BOOLEAN); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12124 x_default_parameter (f, parms, Qcursor_type, Qbox, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12125 "cursorType", "CursorType", RES_TYPE_SYMBOL); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12126 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12127 /* Dimensions, especially f->height, must be done via change_frame_size. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12128 Change will not be effected unless different from the current |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12129 f->height. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12130 width = f->width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12131 height = f->height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12132 f->height = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12133 SET_FRAME_WIDTH (f, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12134 change_frame_size (f, height, width, 1, 0, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12135 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12136 f->no_split = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12137 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12138 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12139 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12140 /* It is now ok to make the frame official even if we get an error |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12141 below. And the frame needs to be on Vframe_list or making it |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12142 visible won't work. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12143 Vframe_list = Fcons (frame, Vframe_list); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12144 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12145 /* Now that the frame is official, it counts as a reference to |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12146 its display. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12147 FRAME_W32_DISPLAY_INFO (f)->reference_count++; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12148 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12149 return unbind_to (count, frame); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12150 #endif /* NTEMACS_TODO */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12151 return Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12152 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12153 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12154 |
31110 | 12155 DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0, |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12156 "Show STRING in a \"tooltip\" window on frame FRAME.\n\ |
31110 | 12157 A tooltip window is a small X window displaying a string.\n\ |
12158 \n\ | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12159 FRAME nil or omitted means use the selected frame.\n\ |
31110 | 12160 \n\ |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12161 PARMS is an optional list of frame parameters which can be\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12162 used to change the tooltip's appearance.\n\ |
31110 | 12163 \n\ |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12164 Automatically hide the tooltip after TIMEOUT seconds.\n\ |
31110 | 12165 TIMEOUT nil means use the default timeout of 5 seconds.\n\ |
12166 \n\ | |
12167 If the list of frame parameters PARAMS contains a `left' parameters,\n\ | |
12168 the tooltip is displayed at that x-position. Otherwise it is\n\ | |
12169 displayed at the mouse position, with offset DX added (default is 5 if\n\ | |
12170 DX isn't specified). Likewise for the y-position; if a `top' frame\n\ | |
12171 parameter is specified, it determines the y-position of the tooltip\n\ | |
12172 window, otherwise it is displayed at the mouse position, with offset\n\ | |
12173 DY added (default is -5).") | |
12174 (string, frame, parms, timeout, dx, dy) | |
12175 Lisp_Object string, frame, parms, timeout, dx, dy; | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12176 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12177 struct frame *f; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12178 struct window *w; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12179 Window root, child; |
31110 | 12180 Lisp_Object buffer, top, left; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12181 struct buffer *old_buffer; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12182 struct text_pos pos; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12183 int i, width, height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12184 int root_x, root_y, win_x, win_y; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12185 unsigned pmask; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12186 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12187 int old_windows_or_buffers_changed = windows_or_buffers_changed; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12188 int count = specpdl_ptr - specpdl; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12189 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12190 specbind (Qinhibit_redisplay, Qt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12191 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
12192 GCPRO4 (string, parms, frame, timeout); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12193 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12194 CHECK_STRING (string, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12195 f = check_x_frame (frame); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12196 if (NILP (timeout)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12197 timeout = make_number (5); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12198 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12199 CHECK_NATNUM (timeout, 2); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12200 |
31110 | 12201 if (NILP (dx)) |
12202 dx = make_number (5); | |
12203 else | |
12204 CHECK_NUMBER (dx, 5); | |
12205 | |
12206 if (NILP (dy)) | |
12207 dy = make_number (-5); | |
12208 else | |
12209 CHECK_NUMBER (dy, 6); | |
12210 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12211 /* Hide a previous tip, if any. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12212 Fx_hide_tip (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12213 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12214 /* Add default values to frame parameters. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12215 if (NILP (Fassq (Qname, parms))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12216 parms = Fcons (Fcons (Qname, build_string ("tooltip")), parms); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12217 if (NILP (Fassq (Qinternal_border_width, parms))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12218 parms = Fcons (Fcons (Qinternal_border_width, make_number (3)), parms); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12219 if (NILP (Fassq (Qborder_width, parms))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12220 parms = Fcons (Fcons (Qborder_width, make_number (1)), parms); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12221 if (NILP (Fassq (Qborder_color, parms))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12222 parms = Fcons (Fcons (Qborder_color, build_string ("lightyellow")), parms); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12223 if (NILP (Fassq (Qbackground_color, parms))) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12224 parms = Fcons (Fcons (Qbackground_color, build_string ("lightyellow")), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12225 parms); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12226 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12227 /* Create a frame for the tooltip, and record it in the global |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12228 variable tip_frame. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12229 frame = x_create_tip_frame (FRAME_W32_DISPLAY_INFO (f), parms); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12230 tip_frame = f = XFRAME (frame); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12231 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12232 /* Set up the frame's root window. Currently we use a size of 80 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12233 columns x 40 lines. If someone wants to show a larger tip, he |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12234 will loose. I don't think this is a realistic case. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12235 w = XWINDOW (FRAME_ROOT_WINDOW (f)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12236 w->left = w->top = make_number (0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12237 w->width = 80; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12238 w->height = 40; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12239 adjust_glyphs (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12240 w->pseudo_window_p = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12241 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12242 /* Display the tooltip text in a temporary buffer. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12243 buffer = Fget_buffer_create (build_string (" *tip*")); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12244 Fset_window_buffer (FRAME_ROOT_WINDOW (f), buffer); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12245 old_buffer = current_buffer; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12246 set_buffer_internal_1 (XBUFFER (buffer)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12247 Ferase_buffer (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12248 Finsert (make_number (1), &string); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12249 clear_glyph_matrix (w->desired_matrix); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12250 clear_glyph_matrix (w->current_matrix); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12251 SET_TEXT_POS (pos, BEGV, BEGV_BYTE); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12252 try_window (FRAME_ROOT_WINDOW (f), pos); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12253 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12254 /* Compute width and height of the tooltip. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12255 width = height = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12256 for (i = 0; i < w->desired_matrix->nrows; ++i) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12257 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12258 struct glyph_row *row = &w->desired_matrix->rows[i]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12259 struct glyph *last; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12260 int row_width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12261 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12262 /* Stop at the first empty row at the end. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12263 if (!row->enabled_p || !row->displays_text_p) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12264 break; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12265 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12266 /* Let the row go over the full width of the frame. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12267 row->full_width_p = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12268 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12269 /* There's a glyph at the end of rows that is use to place |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12270 the cursor there. Don't include the width of this glyph. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12271 if (row->used[TEXT_AREA]) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12272 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12273 last = &row->glyphs[TEXT_AREA][row->used[TEXT_AREA] - 1]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12274 row_width = row->pixel_width - last->pixel_width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12275 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12276 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12277 row_width = row->pixel_width; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12278 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12279 height += row->height; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12280 width = max (width, row_width); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12281 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12282 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12283 /* Add the frame's internal border to the width and height the X |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12284 window should have. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12285 height += 2 * FRAME_INTERNAL_BORDER_WIDTH (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12286 width += 2 * FRAME_INTERNAL_BORDER_WIDTH (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12287 |
31110 | 12288 /* User-specified position? */ |
12289 left = Fcdr (Fassq (Qleft, parms)); | |
12290 top = Fcdr (Fassq (Qtop, parms)); | |
12291 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12292 /* Move the tooltip window where the mouse pointer is. Resize and |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12293 show it. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12294 #if 0 /* NTEMACS_TODO : W32 specifics */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12295 BLOCK_INPUT; |
31110 | 12296 XQueryPointer (FRAME_X_DISPLAY (f), FRAME_X_DISPLAY_INFO (f)->root_window, |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12297 &root, &child, &root_x, &root_y, &win_x, &win_y, &pmask); |
31110 | 12298 UNBLOCK_INPUT; |
12299 | |
12300 root_x += XINT (dx); | |
12301 root_y += XINT (dy); | |
12302 | |
12303 if (INTEGERP (left)) | |
12304 root_x = XINT (left); | |
12305 if (INTEGERP (top)) | |
12306 root_y = XINT (top); | |
12307 | |
12308 BLOCK_INPUT; | |
12309 XMoveResizeWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), | |
12310 root_x, root_y - height, width, height); | |
12311 XMapRaised (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f)); | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12312 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12313 #endif /* NTEMACS_TODO */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12314 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12315 /* Draw into the window. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12316 w->must_be_updated_p = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12317 update_single_window (w, 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12318 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12319 /* Restore original current buffer. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12320 set_buffer_internal_1 (old_buffer); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12321 windows_or_buffers_changed = old_windows_or_buffers_changed; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12322 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12323 /* Let the tip disappear after timeout seconds. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12324 tip_timer = call3 (intern ("run-at-time"), timeout, Qnil, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12325 intern ("x-hide-tip")); |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
12326 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12327 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12328 return unbind_to (count, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12329 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12330 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12331 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12332 DEFUN ("x-hide-tip", Fx_hide_tip, Sx_hide_tip, 0, 0, 0, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12333 "Hide the current tooltip window, if there is any.\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12334 Value is t is tooltip was open, nil otherwise.") |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12335 () |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12336 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12337 int count = specpdl_ptr - specpdl; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12338 int deleted_p = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12339 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12340 specbind (Qinhibit_redisplay, Qt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12341 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12342 if (!NILP (tip_timer)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12343 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12344 call1 (intern ("cancel-timer"), tip_timer); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12345 tip_timer = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12346 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12347 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12348 if (tip_frame) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12349 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12350 Lisp_Object frame; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12351 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12352 XSETFRAME (frame, tip_frame); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12353 Fdelete_frame (frame, Qt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12354 tip_frame = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12355 deleted_p = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12356 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12357 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12358 return unbind_to (count, deleted_p ? Qt : Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12359 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12360 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12361 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12362 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12363 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12364 File selection dialog |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12365 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12366 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12367 extern Lisp_Object Qfile_name_history; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12368 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12369 DEFUN ("x-file-dialog", Fx_file_dialog, Sx_file_dialog, 2, 4, 0, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12370 "Read file name, prompting with PROMPT in directory DIR.\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12371 Use a file selection dialog.\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12372 Select DEFAULT-FILENAME in the dialog's file selection box, if\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12373 specified. Don't let the user enter a file name in the file\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12374 selection dialog's entry field, if MUSTMATCH is non-nil.") |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12375 (prompt, dir, default_filename, mustmatch) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12376 Lisp_Object prompt, dir, default_filename, mustmatch; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12377 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12378 struct frame *f = SELECTED_FRAME (); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12379 Lisp_Object file = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12380 int count = specpdl_ptr - specpdl; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12381 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12382 char filename[MAX_PATH + 1]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12383 char init_dir[MAX_PATH + 1]; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12384 int use_dialog_p = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12385 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12386 GCPRO5 (prompt, dir, default_filename, mustmatch, file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12387 CHECK_STRING (prompt, 0); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12388 CHECK_STRING (dir, 1); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12389 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12390 /* Create the dialog with PROMPT as title, using DIR as initial |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12391 directory and using "*" as pattern. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12392 dir = Fexpand_file_name (dir, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12393 strncpy (init_dir, XSTRING (dir)->data, MAX_PATH); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12394 init_dir[MAX_PATH] = '\0'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12395 unixtodos_filename (init_dir); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12396 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12397 if (STRINGP (default_filename)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12398 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12399 char *file_name_only; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12400 char *full_path_name = XSTRING (default_filename)->data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12401 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12402 unixtodos_filename (full_path_name); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12403 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12404 file_name_only = strrchr (full_path_name, '\\'); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12405 if (!file_name_only) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12406 file_name_only = full_path_name; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12407 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12408 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12409 file_name_only++; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12410 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12411 /* If default_file_name is a directory, don't use the open |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12412 file dialog, as it does not support selecting |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12413 directories. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12414 if (!(*file_name_only)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12415 use_dialog_p = 0; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12416 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12417 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12418 strncpy (filename, file_name_only, MAX_PATH); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12419 filename[MAX_PATH] = '\0'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12420 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12421 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12422 filename[0] = '\0'; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12423 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12424 if (use_dialog_p) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12425 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12426 OPENFILENAME file_details; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12427 char *filename_file; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12428 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12429 /* Prevent redisplay. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12430 specbind (Qinhibit_redisplay, Qt); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12431 BLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12432 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12433 bzero (&file_details, sizeof (file_details)); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12434 file_details.lStructSize = sizeof (file_details); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12435 file_details.hwndOwner = FRAME_W32_WINDOW (f); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12436 file_details.lpstrFile = filename; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12437 file_details.nMaxFile = sizeof (filename); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12438 file_details.lpstrInitialDir = init_dir; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12439 file_details.lpstrTitle = XSTRING (prompt)->data; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12440 file_details.Flags = OFN_HIDEREADONLY | OFN_NOCHANGEDIR; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12441 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12442 if (!NILP (mustmatch)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12443 file_details.Flags |= OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12444 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12445 if (GetOpenFileName (&file_details)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12446 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12447 dostounix_filename (filename); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12448 file = build_string (filename); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12449 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12450 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12451 file = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12452 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12453 UNBLOCK_INPUT; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12454 file = unbind_to (count, file); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12455 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12456 /* Open File dialog will not allow folders to be selected, so resort |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12457 to minibuffer completing reads for directories. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12458 else |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12459 file = Fcompleting_read (prompt, intern ("read-file-name-internal"), |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12460 dir, mustmatch, dir, Qfile_name_history, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12461 default_filename, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12462 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12463 UNGCPRO; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12464 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12465 /* Make "Cancel" equivalent to C-g. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12466 if (NILP (file)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12467 Fsignal (Qquit, Qnil); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12468 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
12469 return unbind_to (count, file); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12470 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12471 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12472 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12473 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12474 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12475 Tests |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12476 ***********************************************************************/ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12477 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12478 #if GLYPH_DEBUG |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12479 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12480 DEFUN ("imagep", Fimagep, Simagep, 1, 1, 0, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12481 "Value is non-nil if SPEC is a valid image specification.") |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12482 (spec) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12483 Lisp_Object spec; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12484 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12485 return valid_image_p (spec) ? Qt : Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12486 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12487 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12488 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12489 DEFUN ("lookup-image", Flookup_image, Slookup_image, 1, 1, 0, "") |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12490 (spec) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12491 Lisp_Object spec; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12492 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12493 int id = -1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12494 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12495 if (valid_image_p (spec)) |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12496 id = lookup_image (SELECTED_FRAME (), spec); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12497 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12498 debug_print (spec); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12499 return make_number (id); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12500 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12501 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12502 #endif /* GLYPH_DEBUG != 0 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12503 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12504 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12505 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12506 /*********************************************************************** |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12507 w32 specialized functions |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12508 ***********************************************************************/ |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12509 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12510 DEFUN ("w32-select-font", Fw32_select_font, Sw32_select_font, 0, 1, 0, |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12511 "This will display the W32 font dialog and return an X font string corresponding to the selection.") |
13434 | 12512 (frame) |
12513 Lisp_Object frame; | |
12514 { | |
12515 FRAME_PTR f = check_x_frame (frame); | |
12516 CHOOSEFONT cf; | |
12517 LOGFONT lf; | |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12518 TEXTMETRIC tm; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12519 HDC hdc; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12520 HANDLE oldobj; |
13434 | 12521 char buf[100]; |
12522 | |
12523 bzero (&cf, sizeof (cf)); | |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12524 bzero (&lf, sizeof (lf)); |
13434 | 12525 |
12526 cf.lStructSize = sizeof (cf); | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12527 cf.hwndOwner = FRAME_W32_WINDOW (f); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12528 cf.Flags = CF_FORCEFONTEXIST | CF_SCREENFONTS; |
13434 | 12529 cf.lpLogFont = &lf; |
12530 | |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12531 /* Initialize as much of the font details as we can from the current |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12532 default font. */ |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12533 hdc = GetDC (FRAME_W32_WINDOW (f)); |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12534 oldobj = SelectObject (hdc, FRAME_FONT (f)->hfont); |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12535 GetTextFace (hdc, LF_FACESIZE, lf.lfFaceName); |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12536 if (GetTextMetrics (hdc, &tm)) |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12537 { |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12538 lf.lfHeight = tm.tmInternalLeading - tm.tmHeight; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12539 lf.lfWeight = tm.tmWeight; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12540 lf.lfItalic = tm.tmItalic; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12541 lf.lfUnderline = tm.tmUnderlined; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12542 lf.lfStrikeOut = tm.tmStruckOut; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12543 lf.lfCharSet = tm.tmCharSet; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12544 cf.Flags |= CF_INITTOLOGFONTSTRUCT; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12545 } |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12546 SelectObject (hdc, oldobj); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12547 ReleaseDC (FRAME_W32_WINDOW (f), hdc); |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
12548 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12549 if (!ChooseFont (&cf) || !w32_to_x_font (&lf, buf, 100)) |
14353 | 12550 return Qnil; |
13434 | 12551 |
12552 return build_string (buf); | |
12553 } | |
12554 | |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12555 DEFUN ("w32-send-sys-command", Fw32_send_sys_command, Sw32_send_sys_command, 1, 2, 0, |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12556 "Send frame a Windows WM_SYSCOMMAND message of type COMMAND.\n\ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12557 Some useful values for command are 0xf030 to maximise frame (0xf020\n\ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12558 to minimize), 0xf120 to restore frame to original size, and 0xf100\n\ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12559 to activate the menubar for keyboard access. 0xf140 activates the\n\ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12560 screen saver if defined.\n\ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12561 \n\ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12562 If optional parameter FRAME is not specified, use selected frame.") |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12563 (command, frame) |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12564 Lisp_Object command, frame; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12565 { |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12566 WPARAM code; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12567 FRAME_PTR f = check_x_frame (frame); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12568 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12569 CHECK_NUMBER (command, 0); |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12570 |
24718
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
12571 PostMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, XINT (command), 0); |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12572 |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12573 return Qnil; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12574 } |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12575 |
24670 | 12576 DEFUN ("w32-shell-execute", Fw32_shell_execute, Sw32_shell_execute, 2, 4, 0, |
12577 "Get Windows to perform OPERATION on DOCUMENT.\n\ | |
12578 This is a wrapper around the ShellExecute system function, which\n\ | |
12579 invokes the application registered to handle OPERATION for DOCUMENT.\n\ | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12580 OPERATION is typically \"open\", \"print\" or \"explore\" (but can be\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12581 nil for the default action), and DOCUMENT is typically the name of a\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12582 document file or URL, but can also be a program executable to run or\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12583 a directory to open in the Windows Explorer.\n\ |
24670 | 12584 \n\ |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12585 If DOCUMENT is a program executable, PARAMETERS can be a string\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12586 containing command line parameters, but otherwise should be nil.\n\ |
24670 | 12587 \n\ |
12588 SHOW-FLAG can be used to control whether the invoked application is hidden\n\ | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12589 or minimized. If SHOW-FLAG is nil, the application is displayed normally,\n\ |
24670 | 12590 otherwise it is an integer representing a ShowWindow flag:\n\ |
12591 \n\ | |
12592 0 - start hidden\n\ | |
12593 1 - start normally\n\ | |
12594 3 - start maximized\n\ | |
12595 6 - start minimized") | |
12596 (operation, document, parameters, show_flag) | |
12597 Lisp_Object operation, document, parameters, show_flag; | |
12598 { | |
12599 Lisp_Object current_dir; | |
12600 | |
12601 CHECK_STRING (document, 0); | |
12602 | |
12603 /* Encode filename and current directory. */ | |
12604 current_dir = ENCODE_FILE (current_buffer->directory); | |
12605 document = ENCODE_FILE (document); | |
12606 if ((int) ShellExecute (NULL, | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12607 (STRINGP (operation) ? |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12608 XSTRING (operation)->data : NULL), |
24670 | 12609 XSTRING (document)->data, |
12610 (STRINGP (parameters) ? | |
12611 XSTRING (parameters)->data : NULL), | |
12612 XSTRING (current_dir)->data, | |
12613 (INTEGERP (show_flag) ? | |
12614 XINT (show_flag) : SW_SHOWDEFAULT)) | |
12615 > 32) | |
12616 return Qt; | |
12617 error ("ShellExecute failed"); | |
12618 } | |
12619 | |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12620 /* Lookup virtual keycode from string representing the name of a |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12621 non-ascii keystroke into the corresponding virtual key, using |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12622 lispy_function_keys. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12623 static int |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12624 lookup_vk_code (char *key) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12625 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12626 int i; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12627 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12628 for (i = 0; i < 256; i++) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12629 if (lispy_function_keys[i] != 0 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12630 && strcmp (lispy_function_keys[i], key) == 0) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12631 return i; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12632 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12633 return -1; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12634 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12635 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12636 /* Convert a one-element vector style key sequence to a hot key |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12637 definition. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12638 static int |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12639 w32_parse_hot_key (key) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12640 Lisp_Object key; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12641 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12642 /* Copied from Fdefine_key and store_in_keymap. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12643 register Lisp_Object c; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12644 int vk_code; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12645 int lisp_modifiers; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12646 int w32_modifiers; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12647 struct gcpro gcpro1; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12648 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12649 CHECK_VECTOR (key, 0); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12650 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12651 if (XFASTINT (Flength (key)) != 1) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12652 return Qnil; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12653 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12654 GCPRO1 (key); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12655 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12656 c = Faref (key, make_number (0)); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12657 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12658 if (CONSP (c) && lucid_event_type_list_p (c)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12659 c = Fevent_convert_list (c); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12660 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12661 UNGCPRO; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12662 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12663 if (! INTEGERP (c) && ! SYMBOLP (c)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12664 error ("Key definition is invalid"); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12665 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12666 /* Work out the base key and the modifiers. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12667 if (SYMBOLP (c)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12668 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12669 c = parse_modifiers (c); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12670 lisp_modifiers = Fcar (Fcdr (c)); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12671 c = Fcar (c); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12672 if (!SYMBOLP (c)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12673 abort (); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12674 vk_code = lookup_vk_code (XSYMBOL (c)->name->data); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12675 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12676 else if (INTEGERP (c)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12677 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12678 lisp_modifiers = XINT (c) & ~CHARACTERBITS; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12679 /* Many ascii characters are their own virtual key code. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12680 vk_code = XINT (c) & CHARACTERBITS; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12681 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12682 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12683 if (vk_code < 0 || vk_code > 255) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12684 return Qnil; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12685 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12686 if ((lisp_modifiers & meta_modifier) != 0 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12687 && !NILP (Vw32_alt_is_meta)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12688 lisp_modifiers |= alt_modifier; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12689 |
31110 | 12690 /* Supply defs missing from mingw32. */ |
12691 #ifndef MOD_ALT | |
12692 #define MOD_ALT 0x0001 | |
12693 #define MOD_CONTROL 0x0002 | |
12694 #define MOD_SHIFT 0x0004 | |
12695 #define MOD_WIN 0x0008 | |
12696 #endif | |
12697 | |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12698 /* Convert lisp modifiers to Windows hot-key form. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12699 w32_modifiers = (lisp_modifiers & hyper_modifier) ? MOD_WIN : 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12700 w32_modifiers |= (lisp_modifiers & alt_modifier) ? MOD_ALT : 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12701 w32_modifiers |= (lisp_modifiers & ctrl_modifier) ? MOD_CONTROL : 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12702 w32_modifiers |= (lisp_modifiers & shift_modifier) ? MOD_SHIFT : 0; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12703 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12704 return HOTKEY (vk_code, w32_modifiers); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12705 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12706 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12707 DEFUN ("w32-register-hot-key", Fw32_register_hot_key, Sw32_register_hot_key, 1, 1, 0, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12708 "Register KEY as a hot-key combination.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12709 Certain key combinations like Alt-Tab are reserved for system use on\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12710 Windows, and therefore are normally intercepted by the system. However,\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12711 most of these key combinations can be received by registering them as\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12712 hot-keys, overriding their special meaning.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12713 \n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12714 KEY must be a one element key definition in vector form that would be\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12715 acceptable to `define-key' (e.g. [A-tab] for Alt-Tab). The meta\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12716 modifier is interpreted as Alt if `w32-alt-is-meta' is t, and hyper\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12717 is always interpreted as the Windows modifier keys.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12718 \n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12719 The return value is the hotkey-id if registered, otherwise nil.") |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12720 (key) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12721 Lisp_Object key; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12722 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12723 key = w32_parse_hot_key (key); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12724 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12725 if (NILP (Fmemq (key, w32_grabbed_keys))) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12726 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12727 /* Reuse an empty slot if possible. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12728 Lisp_Object item = Fmemq (Qnil, w32_grabbed_keys); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12729 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12730 /* Safe to add new key to list, even if we have focus. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12731 if (NILP (item)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12732 w32_grabbed_keys = Fcons (key, w32_grabbed_keys); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12733 else |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12734 XCAR (item) = key; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12735 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12736 /* Notify input thread about new hot-key definition, so that it |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12737 takes effect without needing to switch focus. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12738 PostThreadMessage (dwWindowsThreadId, WM_EMACS_REGISTER_HOT_KEY, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12739 (WPARAM) key, 0); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12740 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12741 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12742 return key; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12743 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12744 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12745 DEFUN ("w32-unregister-hot-key", Fw32_unregister_hot_key, Sw32_unregister_hot_key, 1, 1, 0, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12746 "Unregister HOTKEY as a hot-key combination.") |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12747 (key) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12748 Lisp_Object key; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12749 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12750 Lisp_Object item; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12751 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12752 if (!INTEGERP (key)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12753 key = w32_parse_hot_key (key); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12754 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12755 item = Fmemq (key, w32_grabbed_keys); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12756 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12757 if (!NILP (item)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12758 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12759 /* Notify input thread about hot-key definition being removed, so |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12760 that it takes effect without needing focus switch. */ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12761 if (PostThreadMessage (dwWindowsThreadId, WM_EMACS_UNREGISTER_HOT_KEY, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12762 (WPARAM) XINT (XCAR (item)), (LPARAM) item)) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12763 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12764 MSG msg; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12765 GetMessage (&msg, NULL, WM_EMACS_DONE, WM_EMACS_DONE); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12766 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12767 return Qt; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12768 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12769 return Qnil; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12770 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12771 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12772 DEFUN ("w32-registered-hot-keys", Fw32_registered_hot_keys, Sw32_registered_hot_keys, 0, 0, 0, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12773 "Return list of registered hot-key IDs.") |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12774 () |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12775 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12776 return Fcopy_sequence (w32_grabbed_keys); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12777 } |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12778 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12779 DEFUN ("w32-reconstruct-hot-key", Fw32_reconstruct_hot_key, Sw32_reconstruct_hot_key, 1, 1, 0, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12780 "Convert hot-key ID to a lisp key combination.") |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12781 (hotkeyid) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12782 Lisp_Object hotkeyid; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12783 { |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12784 int vk_code, w32_modifiers; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12785 Lisp_Object key; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12786 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12787 CHECK_NUMBER (hotkeyid, 0); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12788 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12789 vk_code = HOTKEY_VK_CODE (hotkeyid); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12790 w32_modifiers = HOTKEY_MODIFIERS (hotkeyid); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12791 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12792 if (lispy_function_keys[vk_code]) |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12793 key = intern (lispy_function_keys[vk_code]); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12794 else |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12795 key = make_number (vk_code); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12796 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12797 key = Fcons (key, Qnil); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12798 if (w32_modifiers & MOD_SHIFT) |
23950
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
12799 key = Fcons (Qshift, key); |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12800 if (w32_modifiers & MOD_CONTROL) |
23950
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
12801 key = Fcons (Qctrl, key); |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12802 if (w32_modifiers & MOD_ALT) |
23950
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
12803 key = Fcons (NILP (Vw32_alt_is_meta) ? Qalt : Qmeta, key); |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12804 if (w32_modifiers & MOD_WIN) |
23950
d8f8533db4cc
(w32_msg_pump): Ignore WM_NULL message posted to thread
Andrew Innes <andrewi@gnu.org>
parents:
23803
diff
changeset
|
12805 key = Fcons (Qhyper, key); |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12806 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12807 return key; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12808 } |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12809 |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12810 DEFUN ("w32-toggle-lock-key", Fw32_toggle_lock_key, Sw32_toggle_lock_key, 1, 2, 0, |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12811 "Toggle the state of the lock key KEY.\n\ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12812 KEY can be `capslock', `kp-numlock', or `scroll'.\n\ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12813 If the optional parameter NEW-STATE is a number, then the state of KEY\n\ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12814 is set to off if the low bit of NEW-STATE is zero, otherwise on.") |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12815 (key, new_state) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12816 Lisp_Object key, new_state; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12817 { |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12818 int vk_code; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12819 int cur_state; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12820 |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12821 if (EQ (key, intern ("capslock"))) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12822 vk_code = VK_CAPITAL; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12823 else if (EQ (key, intern ("kp-numlock"))) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12824 vk_code = VK_NUMLOCK; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12825 else if (EQ (key, intern ("scroll"))) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12826 vk_code = VK_SCROLL; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12827 else |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12828 return Qnil; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12829 |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12830 if (!dwWindowsThreadId) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12831 return make_number (w32_console_toggle_lock_key (vk_code, new_state)); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12832 |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12833 if (PostThreadMessage (dwWindowsThreadId, WM_EMACS_TOGGLE_LOCK_KEY, |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12834 (WPARAM) vk_code, (LPARAM) new_state)) |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12835 { |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12836 MSG msg; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12837 GetMessage (&msg, NULL, WM_EMACS_DONE, WM_EMACS_DONE); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12838 return make_number (msg.wParam); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12839 } |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12840 return Qnil; |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12841 } |
13434 | 12842 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12843 syms_of_w32fns () |
13434 | 12844 { |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12845 /* This is zero if not using MS-Windows. */ |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12846 w32_in_use = 0; |
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
12847 |
13434 | 12848 /* The section below is built by the lisp expression at the top of the file, |
12849 just above where these variables are declared. */ | |
12850 /*&&& init symbols here &&&*/ | |
12851 Qauto_raise = intern ("auto-raise"); | |
12852 staticpro (&Qauto_raise); | |
12853 Qauto_lower = intern ("auto-lower"); | |
12854 staticpro (&Qauto_lower); | |
12855 Qbar = intern ("bar"); | |
12856 staticpro (&Qbar); | |
12857 Qborder_color = intern ("border-color"); | |
12858 staticpro (&Qborder_color); | |
12859 Qborder_width = intern ("border-width"); | |
12860 staticpro (&Qborder_width); | |
12861 Qbox = intern ("box"); | |
12862 staticpro (&Qbox); | |
12863 Qcursor_color = intern ("cursor-color"); | |
12864 staticpro (&Qcursor_color); | |
12865 Qcursor_type = intern ("cursor-type"); | |
12866 staticpro (&Qcursor_type); | |
12867 Qgeometry = intern ("geometry"); | |
12868 staticpro (&Qgeometry); | |
12869 Qicon_left = intern ("icon-left"); | |
12870 staticpro (&Qicon_left); | |
12871 Qicon_top = intern ("icon-top"); | |
12872 staticpro (&Qicon_top); | |
12873 Qicon_type = intern ("icon-type"); | |
12874 staticpro (&Qicon_type); | |
12875 Qicon_name = intern ("icon-name"); | |
12876 staticpro (&Qicon_name); | |
12877 Qinternal_border_width = intern ("internal-border-width"); | |
12878 staticpro (&Qinternal_border_width); | |
12879 Qleft = intern ("left"); | |
12880 staticpro (&Qleft); | |
16259
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
12881 Qright = intern ("right"); |
f54af1701a5f
(Qright): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16106
diff
changeset
|
12882 staticpro (&Qright); |
13434 | 12883 Qmouse_color = intern ("mouse-color"); |
12884 staticpro (&Qmouse_color); | |
12885 Qnone = intern ("none"); | |
12886 staticpro (&Qnone); | |
12887 Qparent_id = intern ("parent-id"); | |
12888 staticpro (&Qparent_id); | |
12889 Qscroll_bar_width = intern ("scroll-bar-width"); | |
12890 staticpro (&Qscroll_bar_width); | |
12891 Qsuppress_icon = intern ("suppress-icon"); | |
12892 staticpro (&Qsuppress_icon); | |
12893 Qundefined_color = intern ("undefined-color"); | |
12894 staticpro (&Qundefined_color); | |
12895 Qvertical_scroll_bars = intern ("vertical-scroll-bars"); | |
12896 staticpro (&Qvertical_scroll_bars); | |
12897 Qvisibility = intern ("visibility"); | |
12898 staticpro (&Qvisibility); | |
12899 Qwindow_id = intern ("window-id"); | |
12900 staticpro (&Qwindow_id); | |
12901 Qx_frame_parameter = intern ("x-frame-parameter"); | |
12902 staticpro (&Qx_frame_parameter); | |
12903 Qx_resource_name = intern ("x-resource-name"); | |
12904 staticpro (&Qx_resource_name); | |
12905 Quser_position = intern ("user-position"); | |
12906 staticpro (&Quser_position); | |
12907 Quser_size = intern ("user-size"); | |
12908 staticpro (&Quser_size); | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12909 Qscreen_gamma = intern ("screen-gamma"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12910 staticpro (&Qscreen_gamma); |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
12911 Qline_spacing = intern ("line-spacing"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
12912 staticpro (&Qline_spacing); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
12913 Qcenter = intern ("center"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
12914 staticpro (&Qcenter); |
13434 | 12915 /* This is the end of symbol initialization. */ |
12916 | |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12917 Qhyper = intern ("hyper"); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12918 staticpro (&Qhyper); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12919 Qsuper = intern ("super"); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12920 staticpro (&Qsuper); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12921 Qmeta = intern ("meta"); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12922 staticpro (&Qmeta); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12923 Qalt = intern ("alt"); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12924 staticpro (&Qalt); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12925 Qctrl = intern ("ctrl"); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12926 staticpro (&Qctrl); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12927 Qcontrol = intern ("control"); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12928 staticpro (&Qcontrol); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12929 Qshift = intern ("shift"); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12930 staticpro (&Qshift); |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12931 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12932 /* Text property `display' should be nonsticky by default. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12933 Vtext_property_default_nonsticky |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12934 = Fcons (Fcons (Qdisplay, Qt), Vtext_property_default_nonsticky); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12935 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12936 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12937 Qlaplace = intern ("laplace"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12938 staticpro (&Qlaplace); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
12939 |
22625
e7bd87148368
(Fx_list_fonts): Bring arglist into sync with xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
22078
diff
changeset
|
12940 Qface_set_after_frame_default = intern ("face-set-after-frame-default"); |
e7bd87148368
(Fx_list_fonts): Bring arglist into sync with xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
22078
diff
changeset
|
12941 staticpro (&Qface_set_after_frame_default); |
e7bd87148368
(Fx_list_fonts): Bring arglist into sync with xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
22078
diff
changeset
|
12942 |
13434 | 12943 Fput (Qundefined_color, Qerror_conditions, |
12944 Fcons (Qundefined_color, Fcons (Qerror, Qnil))); | |
12945 Fput (Qundefined_color, Qerror_message, | |
12946 build_string ("Undefined color")); | |
12947 | |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12948 staticpro (&w32_grabbed_keys); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12949 w32_grabbed_keys = Qnil; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12950 |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12951 DEFVAR_LISP ("w32-color-map", &Vw32_color_map, |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12952 "An array of color name mappings for windows."); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12953 Vw32_color_map = Qnil; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12954 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12955 DEFVAR_LISP ("w32-pass-alt-to-system", &Vw32_pass_alt_to_system, |
14810
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
12956 "Non-nil if alt key presses are passed on to Windows.\n\ |
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
12957 When non-nil, for example, alt pressed and released and then space will\n\ |
4dd6867765b9
(Vwin32_pass_alt_to_system,
Geoff Voelker <voelker@cs.washington.edu>
parents:
14461
diff
changeset
|
12958 open the System menu. When nil, Emacs silently swallows alt key events."); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12959 Vw32_pass_alt_to_system = Qnil; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12960 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12961 DEFVAR_LISP ("w32-alt-is-meta", &Vw32_alt_is_meta, |
15459
76ff60cd2b8d
(Vwin32_alt_is_meta): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15434
diff
changeset
|
12962 "Non-nil if the alt key is to be considered the same as the meta key.\n\ |
76ff60cd2b8d
(Vwin32_alt_is_meta): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15434
diff
changeset
|
12963 When nil, Emacs will translate the alt key to the Alt modifier, and not Meta."); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12964 Vw32_alt_is_meta = Qt; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
12965 |
24339
e8b73c2ac4ec
(Vw32_quit_key): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24252
diff
changeset
|
12966 DEFVAR_INT ("w32-quit-key", &Vw32_quit_key, |
e8b73c2ac4ec
(Vw32_quit_key): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24252
diff
changeset
|
12967 "If non-zero, the virtual key code for an alternative quit key."); |
e8b73c2ac4ec
(Vw32_quit_key): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24252
diff
changeset
|
12968 XSETINT (Vw32_quit_key, 0); |
e8b73c2ac4ec
(Vw32_quit_key): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24252
diff
changeset
|
12969 |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12970 DEFVAR_LISP ("w32-pass-lwindow-to-system", |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12971 &Vw32_pass_lwindow_to_system, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12972 "Non-nil if the left \"Windows\" key is passed on to Windows.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12973 When non-nil, the Start menu is opened by tapping the key."); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12974 Vw32_pass_lwindow_to_system = Qt; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12975 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12976 DEFVAR_LISP ("w32-pass-rwindow-to-system", |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12977 &Vw32_pass_rwindow_to_system, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12978 "Non-nil if the right \"Windows\" key is passed on to Windows.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12979 When non-nil, the Start menu is opened by tapping the key."); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12980 Vw32_pass_rwindow_to_system = Qt; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12981 |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12982 DEFVAR_INT ("w32-phantom-key-code", |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12983 &Vw32_phantom_key_code, |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12984 "Virtual key code used to generate \"phantom\" key presses.\n\ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12985 Value is a number between 0 and 255.\n\ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12986 \n\ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12987 Phantom key presses are generated in order to stop the system from\n\ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12988 acting on \"Windows\" key events when `w32-pass-lwindow-to-system' or\n\ |
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12989 `w32-pass-rwindow-to-system' is nil."); |
24718
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
12990 /* Although 255 is technically not a valid key code, it works and |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
12991 means that this hack won't interfere with any real key code. */ |
547f54dfbb94
(x_to_w32_charset): Reinstall VIETNAMESE_CHARSET
Andrew Innes <andrewi@gnu.org>
parents:
24695
diff
changeset
|
12992 Vw32_phantom_key_code = 255; |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
12993 |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12994 DEFVAR_LISP ("w32-enable-num-lock", |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12995 &Vw32_enable_num_lock, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12996 "Non-nil if Num Lock should act normally.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12997 Set to nil to see Num Lock as the key `kp-numlock'."); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12998 Vw32_enable_num_lock = Qt; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
12999 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13000 DEFVAR_LISP ("w32-enable-caps-lock", |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13001 &Vw32_enable_caps_lock, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13002 "Non-nil if Caps Lock should act normally.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13003 Set to nil to see Caps Lock as the key `capslock'."); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13004 Vw32_enable_caps_lock = Qt; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13005 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13006 DEFVAR_LISP ("w32-scroll-lock-modifier", |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13007 &Vw32_scroll_lock_modifier, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13008 "Modifier to use for the Scroll Lock on state.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13009 The value can be hyper, super, meta, alt, control or shift for the\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13010 respective modifier, or nil to see Scroll Lock as the key `scroll'.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13011 Any other value will cause the key to be ignored."); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13012 Vw32_scroll_lock_modifier = Qt; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13013 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13014 DEFVAR_LISP ("w32-lwindow-modifier", |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13015 &Vw32_lwindow_modifier, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13016 "Modifier to use for the left \"Windows\" key.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13017 The value can be hyper, super, meta, alt, control or shift for the\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13018 respective modifier, or nil to appear as the key `lwindow'.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13019 Any other value will cause the key to be ignored."); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13020 Vw32_lwindow_modifier = Qnil; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13021 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13022 DEFVAR_LISP ("w32-rwindow-modifier", |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13023 &Vw32_rwindow_modifier, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13024 "Modifier to use for the right \"Windows\" key.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13025 The value can be hyper, super, meta, alt, control or shift for the\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13026 respective modifier, or nil to appear as the key `rwindow'.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13027 Any other value will cause the key to be ignored."); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13028 Vw32_rwindow_modifier = Qnil; |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13029 |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13030 DEFVAR_LISP ("w32-apps-modifier", |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13031 &Vw32_apps_modifier, |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13032 "Modifier to use for the \"Apps\" key.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13033 The value can be hyper, super, meta, alt, control or shift for the\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13034 respective modifier, or nil to appear as the key `apps'.\n\ |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13035 Any other value will cause the key to be ignored."); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13036 Vw32_apps_modifier = Qnil; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13037 |
30239
6a55bd8a85f8
(w32_wnd_proc) [WM_DRAW_ITEM]: Do not try to draw a null title.
Jason Rumney <jasonr@gnu.org>
parents:
29317
diff
changeset
|
13038 DEFVAR_LISP ("w32-enable-synthesized-fonts", &Vw32_enable_synthesized_fonts, |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13039 "Non-nil enables selection of artificially italicized and bold fonts."); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13040 Vw32_enable_synthesized_fonts = Qnil; |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13041 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13042 DEFVAR_LISP ("w32-enable-palette", &Vw32_enable_palette, |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13043 "Non-nil enables Windows palette management to map colors exactly."); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13044 Vw32_enable_palette = Qt; |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13045 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13046 DEFVAR_INT ("w32-mouse-button-tolerance", |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13047 &Vw32_mouse_button_tolerance, |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13048 "Analogue of double click interval for faking middle mouse events.\n\ |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13049 The value is the minimum time in milliseconds that must elapse between\n\ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13050 left/right button down events before they are considered distinct events.\n\ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13051 If both mouse buttons are depressed within this interval, a middle mouse\n\ |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13052 button down event is generated instead."); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13053 XSETINT (Vw32_mouse_button_tolerance, GetDoubleClickTime () / 2); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13054 |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13055 DEFVAR_INT ("w32-mouse-move-interval", |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13056 &Vw32_mouse_move_interval, |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
13057 "Minimum interval between mouse move events.\n\ |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
13058 The value is the minimum time in milliseconds that must elapse between\n\ |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
13059 successive mouse move (or scroll bar drag) events before they are\n\ |
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
13060 reported as lisp events."); |
24252
e0ae6525db58
(syms_of_w32fns): Change default value of w32-mouse-move-interval to
Andrew Innes <andrewi@gnu.org>
parents:
24214
diff
changeset
|
13061 XSETINT (Vw32_mouse_move_interval, 0); |
15290
da73440fdb5f
(Vwin32_mouse_move_interval): New lisp variable.
Karl Heuer <kwzh@gnu.org>
parents:
15280
diff
changeset
|
13062 |
13434 | 13063 init_x_parm_symbols (); |
13064 | |
13065 DEFVAR_LISP ("x-bitmap-file-path", &Vx_bitmap_file_path, | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13066 "List of directories to search for bitmap files for w32."); |
13434 | 13067 Vx_bitmap_file_path = decode_env_path ((char *) 0, "PATH"); |
13068 | |
13069 DEFVAR_LISP ("x-pointer-shape", &Vx_pointer_shape, | |
13070 "The shape of the pointer when over text.\n\ | |
13071 Changing the value does not affect existing frames\n\ | |
13072 unless you set the mouse color."); | |
13073 Vx_pointer_shape = Qnil; | |
13074 | |
13075 DEFVAR_LISP ("x-resource-name", &Vx_resource_name, | |
13076 "The name Emacs uses to look up resources; for internal use only.\n\ | |
13077 `x-get-resource' uses this as the first component of the instance name\n\ | |
13078 when requesting resource values.\n\ | |
13079 Emacs initially sets `x-resource-name' to the name under which Emacs\n\ | |
13080 was invoked, or to the value specified with the `-name' or `-rn'\n\ | |
13081 switches, if present."); | |
13082 Vx_resource_name = Qnil; | |
13083 | |
13084 Vx_nontext_pointer_shape = Qnil; | |
13085 | |
13086 Vx_mode_pointer_shape = Qnil; | |
13087 | |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13088 DEFVAR_LISP ("x-busy-pointer-shape", &Vx_busy_pointer_shape, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13089 "The shape of the pointer when Emacs is busy.\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13090 This variable takes effect when you create a new frame\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13091 or when you set the mouse color."); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13092 Vx_busy_pointer_shape = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13093 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13094 DEFVAR_BOOL ("display-busy-cursor", &display_busy_cursor_p, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13095 "Non-zero means Emacs displays a busy cursor on window systems."); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13096 display_busy_cursor_p = 1; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13097 |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
13098 DEFVAR_LISP ("busy-cursor-delay", &Vbusy_cursor_delay, |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
13099 "*Seconds to wait before displaying a busy-cursor.\n\ |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13100 Value must be an integer or float."); |
27936
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
13101 Vbusy_cursor_delay = make_number (DEFAULT_BUSY_CURSOR_DELAY); |
4c1ad68f8688
Bring up to date with xfns.c changes from 2000-02-25 and 2000-02-21.
Jason Rumney <jasonr@gnu.org>
parents:
27894
diff
changeset
|
13102 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13103 DEFVAR_LISP ("x-sensitive-text-pointer-shape", |
13434 | 13104 &Vx_sensitive_text_pointer_shape, |
13105 "The shape of the pointer when over mouse-sensitive text.\n\ | |
13106 This variable takes effect when you create a new frame\n\ | |
13107 or when you set the mouse color."); | |
13108 Vx_sensitive_text_pointer_shape = Qnil; | |
13109 | |
13110 DEFVAR_LISP ("x-cursor-fore-pixel", &Vx_cursor_fore_pixel, | |
13111 "A string indicating the foreground color of the cursor box."); | |
13112 Vx_cursor_fore_pixel = Qnil; | |
13113 | |
13114 DEFVAR_LISP ("x-no-window-manager", &Vx_no_window_manager, | |
13115 "Non-nil if no window manager is in use.\n\ | |
13116 Emacs doesn't try to figure this out; this is always nil\n\ | |
13117 unless you set it to something else."); | |
13118 /* We don't have any way to find this out, so set it to nil | |
13119 and maybe the user would like to set it to t. */ | |
13120 Vx_no_window_manager = Qnil; | |
13121 | |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13122 DEFVAR_LISP ("x-pixel-size-width-font-regexp", |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13123 &Vx_pixel_size_width_font_regexp, |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13124 "Regexp matching a font name whose width is the same as `PIXEL_SIZE'.\n\ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13125 \n\ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13126 Since Emacs gets width of a font matching with this regexp from\n\ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13127 PIXEL_SIZE field of the name, font finding mechanism gets faster for\n\ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13128 such a font. This is especially effective for such large fonts as\n\ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13129 Chinese, Japanese, and Korean."); |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13130 Vx_pixel_size_width_font_regexp = Qnil; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13131 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13132 DEFVAR_LISP ("image-cache-eviction-delay", &Vimage_cache_eviction_delay, |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13133 "Time after which cached images are removed from the cache.\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13134 When an image has not been displayed this many seconds, remove it\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13135 from the image cache. Value must be an integer or nil with nil\n\ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13136 meaning don't clear the cache."); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13137 Vimage_cache_eviction_delay = make_number (30 * 60); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13138 |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
13139 DEFVAR_LISP ("w32-bdf-filename-alist", |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
13140 &Vw32_bdf_filename_alist, |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
13141 "List of bdf fonts and their corresponding filenames."); |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
13142 Vw32_bdf_filename_alist = Qnil; |
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
13143 |
24481
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
13144 DEFVAR_BOOL ("w32-strict-fontnames", |
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
13145 &w32_strict_fontnames, |
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
13146 "Non-nil means only use fonts that are exact matches for those requested.\n\ |
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
13147 Default is nil, which allows old fontnames that are not XLFD compliant,\n\ |
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
13148 and allows third-party CJK display to work by specifying false charset\n\ |
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
13149 fields to trick Emacs into translating to Big5, SJIS etc.\n\ |
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
13150 Setting this to t will prevent wrong fonts being selected when\n\ |
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
13151 fontsets are automatically created."); |
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
13152 w32_strict_fontnames = 0; |
f65692fe7dd5
(w32_strict_fontnames): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24479
diff
changeset
|
13153 |
24695
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
13154 DEFVAR_BOOL ("w32-strict-painting", |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
13155 &w32_strict_painting, |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
13156 "Non-nil means use strict rules for repainting frames.\n\ |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
13157 Set this to nil to get the old behaviour for repainting; this should\n\ |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
13158 only be necessary if the default setting causes problems."); |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
13159 w32_strict_painting = 1; |
2fe2c743ce68
(w32_strict_painting): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
24692
diff
changeset
|
13160 |
24497
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
13161 DEFVAR_LISP ("w32-system-coding-system", |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
13162 &Vw32_system_coding_system, |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
13163 "Coding system used by Windows system functions, such as for font names."); |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
13164 Vw32_system_coding_system = Qnil; |
b09ceba3d319
(enum_font_cb2): Set the font height to be the
Geoff Voelker <voelker@cs.washington.edu>
parents:
24481
diff
changeset
|
13165 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13166 DEFVAR_LISP ("w32-charset-info-alist", |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13167 &Vw32_charset_info_alist, |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13168 "Alist linking Emacs character sets to Windows fonts\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13169 and codepages. Each entry should be of the form:\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13170 \n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13171 (CHARSET_NAME . (WINDOWS_CHARSET . CODEPAGE))\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13172 \n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13173 where CHARSET_NAME is a string used in font names to identify the charset,\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13174 WINDOWS_CHARSET is a symbol that can be one of:\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13175 w32-charset-ansi, w32-charset-default, w32-charset-symbol,\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13176 w32-charset-shiftjis, w32-charset-hangul, w32-charset-gb2312,\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13177 w32-charset-chinesebig5, " |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13178 #ifdef JOHAB_CHARSET |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13179 "w32-charset-johab, w32-charset-hebrew,\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13180 w32-charset-arabic, w32-charset-greek, w32-charset-turkish,\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13181 w32-charset-vietnamese, w32-charset-thai, w32-charset-easteurope,\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13182 w32-charset-russian, w32-charset-mac, w32-charset-baltic,\n" |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13183 #endif |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13184 #ifdef UNICODE_CHARSET |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13185 "w32-charset-unicode, " |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13186 #endif |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13187 "or w32-charset-oem.\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13188 CODEPAGE should be an integer specifying the codepage that should be used\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13189 to display the character set, t to do no translation and output as Unicode,\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13190 or nil to do no translation and output as 8 bit (or multibyte on far-east\n\ |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13191 versions of Windows) characters."); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13192 Vw32_charset_info_alist = Qnil; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13193 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13194 staticpro (&Qw32_charset_ansi); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13195 Qw32_charset_ansi = intern ("w32-charset-ansi"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13196 staticpro (&Qw32_charset_symbol); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13197 Qw32_charset_symbol = intern ("w32-charset-symbol"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13198 staticpro (&Qw32_charset_shiftjis); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13199 Qw32_charset_shiftjis = intern ("w32-charset-shiftjis"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13200 staticpro (&Qw32_charset_hangul); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13201 Qw32_charset_hangul = intern ("w32-charset-hangul"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13202 staticpro (&Qw32_charset_chinesebig5); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13203 Qw32_charset_chinesebig5 = intern ("w32-charset-chinesebig5"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13204 staticpro (&Qw32_charset_gb2312); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13205 Qw32_charset_gb2312 = intern ("w32-charset-gb2312"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13206 staticpro (&Qw32_charset_oem); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13207 Qw32_charset_oem = intern ("w32-charset-oem"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13208 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13209 #ifdef JOHAB_CHARSET |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13210 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13211 static int w32_extra_charsets_defined = 1; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13212 DEFVAR_BOOL ("w32-extra-charsets-defined", w32_extra_charsets_defined, ""); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13213 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13214 staticpro (&Qw32_charset_johab); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13215 Qw32_charset_johab = intern ("w32-charset-johab"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13216 staticpro (&Qw32_charset_easteurope); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13217 Qw32_charset_easteurope = intern ("w32-charset-easteurope"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13218 staticpro (&Qw32_charset_turkish); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13219 Qw32_charset_turkish = intern ("w32-charset-turkish"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13220 staticpro (&Qw32_charset_baltic); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13221 Qw32_charset_baltic = intern ("w32-charset-baltic"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13222 staticpro (&Qw32_charset_russian); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13223 Qw32_charset_russian = intern ("w32-charset-russian"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13224 staticpro (&Qw32_charset_arabic); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13225 Qw32_charset_arabic = intern ("w32-charset-arabic"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13226 staticpro (&Qw32_charset_greek); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13227 Qw32_charset_greek = intern ("w32-charset-greek"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13228 staticpro (&Qw32_charset_hebrew); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13229 Qw32_charset_hebrew = intern ("w32-charset-hebrew"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13230 staticpro (&Qw32_charset_thai); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13231 Qw32_charset_thai = intern ("w32-charset-thai"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13232 staticpro (&Qw32_charset_mac); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13233 Qw32_charset_mac = intern ("w32-charset-mac"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13234 } |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13235 #endif |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13236 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13237 #ifdef UNICODE_CHARSET |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13238 { |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13239 static int w32_unicode_charset_defined = 1; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13240 DEFVAR_BOOL ("w32-unicode-charset-defined", |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13241 w32_unicode_charset_defined, ""); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13242 |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13243 staticpro (&Qw32_charset_unicode); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13244 Qw32_charset_unicode = intern ("w32-charset-unicode"); |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13245 #endif |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13246 |
13434 | 13247 defsubr (&Sx_get_resource); |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13248 #if 0 /* NTEMACS_TODO: Port to W32 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13249 defsubr (&Sx_change_window_property); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13250 defsubr (&Sx_delete_window_property); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13251 defsubr (&Sx_window_property); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13252 #endif |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
25646
diff
changeset
|
13253 defsubr (&Sxw_display_color_p); |
13434 | 13254 defsubr (&Sx_display_grayscale_p); |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
25646
diff
changeset
|
13255 defsubr (&Sxw_color_defined_p); |
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
25646
diff
changeset
|
13256 defsubr (&Sxw_color_values); |
13434 | 13257 defsubr (&Sx_server_max_request_size); |
13258 defsubr (&Sx_server_vendor); | |
13259 defsubr (&Sx_server_version); | |
13260 defsubr (&Sx_display_pixel_width); | |
13261 defsubr (&Sx_display_pixel_height); | |
13262 defsubr (&Sx_display_mm_width); | |
13263 defsubr (&Sx_display_mm_height); | |
13264 defsubr (&Sx_display_screens); | |
13265 defsubr (&Sx_display_planes); | |
13266 defsubr (&Sx_display_color_cells); | |
13267 defsubr (&Sx_display_visual_class); | |
13268 defsubr (&Sx_display_backing_store); | |
13269 defsubr (&Sx_display_save_under); | |
13270 defsubr (&Sx_parse_geometry); | |
13271 defsubr (&Sx_create_frame); | |
13272 defsubr (&Sx_open_connection); | |
13273 defsubr (&Sx_close_connection); | |
13274 defsubr (&Sx_display_list); | |
13275 defsubr (&Sx_synchronize); | |
13276 | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13277 /* W32 specific functions */ |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13278 |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
13279 defsubr (&Sw32_focus_frame); |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13280 defsubr (&Sw32_select_font); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13281 defsubr (&Sw32_define_rgb_color); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13282 defsubr (&Sw32_default_color_map); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13283 defsubr (&Sw32_load_color_file); |
19707
0181cc080316
Include limits.h and errno.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18508
diff
changeset
|
13284 defsubr (&Sw32_send_sys_command); |
24670 | 13285 defsubr (&Sw32_shell_execute); |
23681
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13286 defsubr (&Sw32_register_hot_key); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13287 defsubr (&Sw32_unregister_hot_key); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13288 defsubr (&Sw32_registered_hot_keys); |
af0276da2059
(Vw32_pass_optional_keys_to_system): Variable removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23637
diff
changeset
|
13289 defsubr (&Sw32_reconstruct_hot_key); |
23803
f112aa8f8f5d
(Vw32_phantom_key_code): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23801
diff
changeset
|
13290 defsubr (&Sw32_toggle_lock_key); |
24147
c83b0bc4e8b9
(Vw32_bdf_filename_alist): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24130
diff
changeset
|
13291 defsubr (&Sw32_find_bdf_fonts); |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13292 |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13293 /* Setting callback functions for fontset handler. */ |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13294 get_font_info_func = w32_get_font_info; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13295 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13296 #if 0 /* This function pointer doesn't seem to be used anywhere. |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13297 And the pointer assigned has the wrong type, anyway. */ |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13298 list_fonts_func = w32_list_fonts; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13299 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13300 |
23506
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13301 load_font_func = w32_load_font; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13302 find_ccl_program_func = w32_find_ccl_program; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13303 query_font_func = w32_query_font; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13304 set_frame_fontset_func = x_set_font; |
246a14f0622f
(Vx_pixel_size_width): New global variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23407
diff
changeset
|
13305 check_window_system_func = check_w32; |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13306 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13307 #if 0 /* NTEMACS_TODO Image support for W32 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13308 /* Images. */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13309 Qxbm = intern ("xbm"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13310 staticpro (&Qxbm); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13311 QCtype = intern (":type"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13312 staticpro (&QCtype); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13313 QCalgorithm = intern (":algorithm"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13314 staticpro (&QCalgorithm); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13315 QCheuristic_mask = intern (":heuristic-mask"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13316 staticpro (&QCheuristic_mask); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13317 QCcolor_symbols = intern (":color-symbols"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13318 staticpro (&QCcolor_symbols); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13319 QCascent = intern (":ascent"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13320 staticpro (&QCascent); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13321 QCmargin = intern (":margin"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13322 staticpro (&QCmargin); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13323 QCrelief = intern (":relief"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13324 staticpro (&QCrelief); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13325 Qpostscript = intern ("postscript"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13326 staticpro (&Qpostscript); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13327 QCloader = intern (":loader"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13328 staticpro (&QCloader); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13329 QCbounding_box = intern (":bounding-box"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13330 staticpro (&QCbounding_box); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13331 QCpt_width = intern (":pt-width"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13332 staticpro (&QCpt_width); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13333 QCpt_height = intern (":pt-height"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13334 staticpro (&QCpt_height); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13335 QCindex = intern (":index"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13336 staticpro (&QCindex); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13337 Qpbm = intern ("pbm"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13338 staticpro (&Qpbm); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13339 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13340 #if HAVE_XPM |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13341 Qxpm = intern ("xpm"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13342 staticpro (&Qxpm); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13343 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13344 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13345 #if HAVE_JPEG |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13346 Qjpeg = intern ("jpeg"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13347 staticpro (&Qjpeg); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13348 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13349 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13350 #if HAVE_TIFF |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13351 Qtiff = intern ("tiff"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13352 staticpro (&Qtiff); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13353 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13354 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13355 #if HAVE_GIF |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13356 Qgif = intern ("gif"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13357 staticpro (&Qgif); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13358 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13359 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13360 #if HAVE_PNG |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13361 Qpng = intern ("png"); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13362 staticpro (&Qpng); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13363 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13364 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13365 defsubr (&Sclear_image_cache); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13366 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13367 #if GLYPH_DEBUG |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13368 defsubr (&Simagep); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13369 defsubr (&Slookup_image); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13370 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13371 #endif /* NTEMACS_TODO */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13372 |
29317
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13373 busy_cursor_atimer = NULL; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13374 busy_cursor_shown_p = 0; |
2d3d5bf49d4e
Format and doc changes to bring closer to xfns.c.
Jason Rumney <jasonr@gnu.org>
parents:
29021
diff
changeset
|
13375 |
27397
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13376 defsubr (&Sx_show_tip); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13377 defsubr (&Sx_hide_tip); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13378 staticpro (&tip_timer); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13379 tip_timer = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13380 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13381 defsubr (&Sx_file_dialog); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13382 } |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13383 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13384 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13385 void |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13386 init_xfns () |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13387 { |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13388 image_types = NULL; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13389 Vimage_types = Qnil; |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13390 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13391 #if 0 /* NTEMACS_TODO : Image support for W32 */ |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13392 define_image_type (&xbm_type); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13393 define_image_type (&gs_type); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13394 define_image_type (&pbm_type); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13395 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13396 #if HAVE_XPM |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13397 define_image_type (&xpm_type); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13398 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13399 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13400 #if HAVE_JPEG |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13401 define_image_type (&jpeg_type); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13402 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13403 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13404 #if HAVE_TIFF |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13405 define_image_type (&tiff_type); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13406 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13407 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13408 #if HAVE_GIF |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13409 define_image_type (&gif_type); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13410 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13411 |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13412 #if HAVE_PNG |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13413 define_image_type (&png_type); |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13414 #endif |
d98e84b468a2
Substantial rewrite for new redisplay. Major changes:
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
13415 #endif /* NTEMACS_TODO */ |
13434 | 13416 } |
13417 | |
13418 #undef abort | |
13419 | |
13420 void | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16259
diff
changeset
|
13421 w32_abort() |
13434 | 13422 { |
15147
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13423 int button; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13424 button = MessageBox (NULL, |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13425 "A fatal error has occurred!\n\n" |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13426 "Select Abort to exit, Retry to debug, Ignore to continue", |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13427 "Emacs Abort Dialog", |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13428 MB_ICONEXCLAMATION | MB_TASKMODAL |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13429 | MB_SETFOREGROUND | MB_ABORTRETRYIGNORE); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13430 switch (button) |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13431 { |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13432 case IDRETRY: |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13433 DebugBreak (); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13434 break; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13435 case IDIGNORE: |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13436 break; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13437 case IDABORT: |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13438 default: |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13439 abort (); |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13440 break; |
38c0ce06203f
(quit_char, Vwin32_enable_italics, Vwin32_enable_palette):
Geoff Voelker <voelker@cs.washington.edu>
parents:
15034
diff
changeset
|
13441 } |
13434 | 13442 } |
15148
220145cf7546
(continuation of previous checkin)
Geoff Voelker <voelker@cs.washington.edu>
parents:
15147
diff
changeset
|
13443 |
23801
119fd94ae526
(w32_last_error): Fix cut+paste error.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23681
diff
changeset
|
13444 /* For convenience when debugging. */ |
119fd94ae526
(w32_last_error): Fix cut+paste error.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23681
diff
changeset
|
13445 int |
119fd94ae526
(w32_last_error): Fix cut+paste error.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23681
diff
changeset
|
13446 w32_last_error() |
119fd94ae526
(w32_last_error): Fix cut+paste error.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23681
diff
changeset
|
13447 { |
119fd94ae526
(w32_last_error): Fix cut+paste error.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23681
diff
changeset
|
13448 return GetLastError (); |
119fd94ae526
(w32_last_error): Fix cut+paste error.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23681
diff
changeset
|
13449 } |