Mercurial > emacs
annotate src/w32term.c @ 49393:85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
(x_draw_composite_glyph_string_foreground): Implement overstriking.
* w32term.c (x_write_glyphs): Clear phys_cursor_on_p if current
phys_cursor's hpos is overwritten. This is still not completely
correct, as it doesn't really make sense to use hpos at all to
get the cursor glyph (as that is relative to the width of the
characters on the line, which may have changed during the update).
* w32term.c (notice_overwritten_cursor): Handle the special case
of the cursor being in the first blank non-text line at the
end of a window.
* w32term.c (x_draw_hollow_cursor, x_draw_bar_cursor)
(x_draw_phys_cursor_glyph): Set phys_cursor_width here.
Compute from the x position returned by x_draw_glyphs.
* w32term.c (note_mode_line_or_margin_highlight): Renamed from
note_mode_line_highlight and extended.
* w32term.c (last_window): New variable.
(w32_read_socket) <WM_MOUSEMOVE>: Generate SELECT_WINDOW_EVENTs.
(note_mouse_movement): Remove reimplemented code in #if 0.
| author | Jason Rumney <jasonr@gnu.org> |
|---|---|
| date | Wed, 22 Jan 2003 23:04:05 +0000 |
| parents | c73ce11bb264 |
| children | 8054c23b6726 d7ddb3e565de |
| rev | line source |
|---|---|
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
1 /* Implementation of GUI terminal on the Microsoft W32 API. |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2 Copyright (C) 1989, 93, 94, 95, 96, 1997, 1998, 1999, 2000, 2001 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
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 | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
18 along with GNU Emacs; see the file COPYING. If not, write to |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
| 15742 | 20 Boston, MA 02111-1307, USA. */ |
| 13434 | 21 |
|
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25646
diff
changeset
|
22 #include <config.h> |
| 13434 | 23 #include <signal.h> |
| 24 #include <stdio.h> | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
25 #include <stdlib.h> |
| 13434 | 26 #include "lisp.h" |
|
18507
be4c110cda51
Include charset.h.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
27 #include "charset.h" |
| 13434 | 28 #include "blockinput.h" |
| 29 | |
| 24674 | 30 #include "w32heap.h" |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
31 #include "w32term.h" |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
32 #include "w32bdf.h" |
| 21885 | 33 #include <shellapi.h> |
| 13434 | 34 |
| 35 #include "systty.h" | |
| 36 #include "systime.h" | |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
37 #include "atimer.h" |
|
39697
0b986bb45526
Include keymap.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
38 #include "keymap.h" |
| 13434 | 39 |
| 40 #include <ctype.h> | |
| 41 #include <errno.h> | |
| 42 #include <setjmp.h> | |
| 43 #include <sys/stat.h> | |
| 44 | |
|
31116
bbd7763673b6
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
31010
diff
changeset
|
45 #include "keyboard.h" |
| 13434 | 46 #include "frame.h" |
| 47 #include "dispextern.h" | |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
48 #include "fontset.h" |
| 13434 | 49 #include "termhooks.h" |
| 50 #include "termopts.h" | |
| 51 #include "termchar.h" | |
| 52 #include "gnu.h" | |
| 53 #include "disptab.h" | |
| 54 #include "buffer.h" | |
| 55 #include "window.h" | |
| 56 #include "intervals.h" | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
57 #include "composite.h" |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
58 #include "coding.h" |
| 13434 | 59 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
60 #define abs(x) ((x) < 0 ? -(x) : (x)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
61 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
62 #define BETWEEN(X, LOWER, UPPER) ((X) >= (LOWER) && (X) < (UPPER)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
63 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
64 |
| 41125 | 65 /* Fringe bitmaps. */ |
| 66 | |
| 67 enum fringe_bitmap_type | |
| 68 { | |
| 69 NO_FRINGE_BITMAP, | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
70 LEFT_TRUNCATION_BITMAP, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
71 RIGHT_TRUNCATION_BITMAP, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
72 OVERLAY_ARROW_BITMAP, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
73 CONTINUED_LINE_BITMAP, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
74 CONTINUATION_LINE_BITMAP, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
75 ZV_LINE_BITMAP |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
76 }; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
77 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
78 /* Bitmaps are all unsigned short, as Windows requires bitmap data to |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
79 be Word aligned. For some reason they are horizontally reflected |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
80 compared to how they appear on X, so changes in xterm.c should be |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
81 reflected here. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
82 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
83 /* Bitmap drawn to indicate lines not displaying text if |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
84 `indicate-empty-lines' is non-nil. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
85 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
86 #define zv_width 8 |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
87 #define zv_height 72 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
88 #define zv_period 3 |
|
44095
cdcab7b110f6
(zv_bits): Declare as short, for word alignment.
Jason Rumney <jasonr@gnu.org>
parents:
44045
diff
changeset
|
89 static unsigned short zv_bits[] = { |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
90 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
91 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
92 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
93 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
94 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
95 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
96 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
97 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00}; |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
98 static HBITMAP zv_bmp; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
99 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
100 /* An arrow like this: `<-'. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
101 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
102 #define left_width 8 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
103 #define left_height 8 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
104 static unsigned short left_bits[] = { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
105 0x18, 0x30, 0x60, 0xfc, 0xfc, 0x60, 0x30, 0x18}; |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
106 static HBITMAP left_bmp; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
107 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
108 /* Right truncation arrow bitmap `->'. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
109 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
110 #define right_width 8 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
111 #define right_height 8 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
112 static unsigned short right_bits[] = { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
113 0x18, 0x0c, 0x06, 0x3f, 0x3f, 0x06, 0x0c, 0x18}; |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
114 static HBITMAP right_bmp; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
115 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
116 /* Marker for continued lines. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
117 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
118 #define continued_width 8 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
119 #define continued_height 8 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
120 static unsigned short continued_bits[] = { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
121 0x3c, 0x3e, 0x03, 0x27, 0x3f, 0x3e, 0x3c, 0x3e}; |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
122 static HBITMAP continued_bmp; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
123 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
124 /* Marker for continuation lines. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
125 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
126 #define continuation_width 8 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
127 #define continuation_height 8 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
128 static unsigned short continuation_bits[] = { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
129 0x3c, 0x7c, 0xc0, 0xe4, 0xfc, 0x7c, 0x3c, 0x7c}; |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
130 static HBITMAP continuation_bmp; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
131 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
132 /* Overlay arrow bitmap. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
133 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
134 #if 0 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
135 /* A bomb. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
136 #define ov_width 8 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
137 #define ov_height 8 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
138 static unsigned short ov_bits[] = { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
139 0x0c, 0x10, 0x3c, 0x7e, 0x5e, 0x5e, 0x46, 0x3c}; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
140 #else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
141 /* A triangular arrow. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
142 #define ov_width 8 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
143 #define ov_height 8 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
144 static unsigned short ov_bits[] = { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
145 0xc0, 0xf0, 0xf8, 0xfc, 0xfc, 0xf8, 0xf0, 0xc0}; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
146 #endif |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
147 static HBITMAP ov_bmp; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
148 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
149 extern Lisp_Object Qhelp_echo; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
150 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
151 |
|
34869
1d671133e618
(syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents:
34823
diff
changeset
|
152 /* Non-nil means Emacs uses toolkit scroll bars. */ |
|
1d671133e618
(syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents:
34823
diff
changeset
|
153 |
|
1d671133e618
(syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents:
34823
diff
changeset
|
154 Lisp_Object Vx_toolkit_scroll_bars; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
155 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
156 /* If a string, w32_read_socket generates an event to display that string. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
157 (The display is done in read_char.) */ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
158 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
159 static Lisp_Object help_echo; |
|
30988
a69a2ac4345b
(help_echo_window): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
30730
diff
changeset
|
160 static Lisp_Object help_echo_window; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
161 static Lisp_Object help_echo_object; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
162 static int help_echo_pos; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
163 |
|
48819
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
164 /* Temporary variables for w32_read_socket. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
165 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
166 static Lisp_Object previous_help_echo; |
|
48819
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
167 static int last_mousemove_x = 0; |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
168 static int last_mousemove_y = 0; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
169 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
170 /* Non-zero means that a HELP_EVENT has been generated since Emacs |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
171 start. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
172 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
173 static int any_help_event_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
174 |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
175 /* Non-zero means autoselect window with the mouse cursor. */ |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
176 |
|
44359
ff9f7aee02c8
Rename autoselect_window_p to mouse_autoselect_window.
Pavel Jan?k <Pavel@Janik.cz>
parents:
44302
diff
changeset
|
177 int mouse_autoselect_window; |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
178 |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
179 /* Last window where we saw the mouse. Used by mouse-autoselect-window. */ |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
180 static Lisp_Object last_window; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
181 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
182 /* Non-zero means draw block and hollow cursor as wide as the glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
183 under it. For example, if a block cursor is over a tab, it will be |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
184 drawn as wide as that tab on the display. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
185 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
186 int x_stretch_cursor_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
187 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
188 /* Non-zero means make use of UNDERLINE_POSITION font properties. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
189 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
190 int x_use_underline_position_properties; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
191 |
|
21875
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
192 extern unsigned int msh_mousewheel; |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
193 |
| 13434 | 194 extern void free_frame_menubar (); |
| 195 | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
196 extern int w32_codepage_for_font (char *fontname); |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
197 extern Cursor w32_load_cursor (LPCTSTR name); |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
198 |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
199 extern glyph_metric *w32_BDF_TextMetric(bdffont *fontp, |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
200 unsigned char *text, int dim); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
201 extern Lisp_Object Vwindow_system; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
202 |
| 13434 | 203 #define x_any_window_to_frame x_window_to_frame |
| 204 #define x_top_window_to_frame x_window_to_frame | |
| 205 | |
| 206 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
207 /* This is display since w32 does not support multiple ones. */ |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
208 struct w32_display_info one_w32_display_info; |
|
38570
9606b955465e
(x_display_list): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
36315
diff
changeset
|
209 struct w32_display_info *x_display_list; |
| 13434 | 210 |
| 211 /* This is a list of cons cells, each of the form (NAME . FONT-LIST-CACHE), | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
212 one for each element of w32_display_list and in the same order. |
| 13434 | 213 NAME is the name of the frame. |
| 214 FONT-LIST-CACHE records previous values returned by x-list-fonts. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
215 Lisp_Object w32_display_name_list; |
| 13434 | 216 |
| 217 /* Frame being updated by update_frame. This is declared in term.c. | |
| 218 This is set by update_begin and looked at by all the | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
219 w32 functions. It is zero while not inside an update. |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
220 In that case, the w32 functions assume that `SELECTED_FRAME ()' |
| 13434 | 221 is the frame to apply to. */ |
| 222 extern struct frame *updating_frame; | |
| 223 | |
| 224 /* This is a frame waiting to be autoraised, within w32_read_socket. */ | |
| 225 struct frame *pending_autoraise_frame; | |
| 226 | |
| 227 /* Nominal cursor position -- where to draw output. | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
228 HPOS and VPOS are window relative glyph matrix coordinates. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
229 X and Y are window relative pixel coordinates. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
230 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
231 struct cursor_pos output_cursor; |
| 13434 | 232 |
|
40384
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
233 /* The handle of the frame that currently owns the system caret. */ |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
234 HWND w32_system_caret_hwnd; |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
235 int w32_system_caret_height; |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
236 int w32_system_caret_x; |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
237 int w32_system_caret_y; |
|
42864
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
238 int w32_use_visible_system_caret; |
|
40384
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
239 |
|
23639
516fc58a7b7b
(w32_enable_unicode_output): Rename from
Geoff Voelker <voelker@cs.washington.edu>
parents:
23638
diff
changeset
|
240 /* Flag to enable Unicode output in case users wish to use programs |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
241 like Twinbridge on '95 rather than installed system level support |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
242 for Far East languages. */ |
|
23639
516fc58a7b7b
(w32_enable_unicode_output): Rename from
Geoff Voelker <voelker@cs.washington.edu>
parents:
23638
diff
changeset
|
243 int w32_enable_unicode_output; |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
244 |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
245 DWORD dwWindowsThreadId = 0; |
|
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
246 HANDLE hWindowsThread = NULL; |
| 13434 | 247 DWORD dwMainThreadId = 0; |
| 248 HANDLE hMainThread = NULL; | |
| 249 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
250 #ifndef SIF_ALL |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
251 /* These definitions are new with Windows 95. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
252 #define SIF_RANGE 0x0001 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
253 #define SIF_PAGE 0x0002 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
254 #define SIF_POS 0x0004 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
255 #define SIF_DISABLENOSCROLL 0x0008 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
256 #define SIF_TRACKPOS 0x0010 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
257 #define SIF_ALL (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
258 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
259 typedef struct tagSCROLLINFO |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
260 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
261 UINT cbSize; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
262 UINT fMask; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
263 int nMin; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
264 int nMax; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
265 UINT nPage; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
266 int nPos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
267 int nTrackPos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
268 } SCROLLINFO, FAR *LPSCROLLINFO; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
269 typedef SCROLLINFO CONST FAR *LPCSCROLLINFO; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
270 #endif /* SIF_ALL */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
271 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
272 /* Dynamic linking to new proportional scroll bar functions. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
273 int (PASCAL *pfnSetScrollInfo) (HWND hwnd, int fnBar, LPSCROLLINFO lpsi, BOOL fRedraw); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
274 BOOL (PASCAL *pfnGetScrollInfo) (HWND hwnd, int fnBar, LPSCROLLINFO lpsi); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
275 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
276 int vertical_scroll_bar_min_handle; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
277 int vertical_scroll_bar_top_border; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
278 int vertical_scroll_bar_bottom_border; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
279 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
280 int last_scroll_bar_drag_pos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
281 |
| 13434 | 282 /* Mouse movement. */ |
| 283 | |
| 284 /* Where the mouse was last time we reported a mouse event. */ | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
285 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
286 FRAME_PTR last_mouse_frame; |
| 13434 | 287 static RECT last_mouse_glyph; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
288 static Lisp_Object last_mouse_press_frame; |
| 13434 | 289 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
290 Lisp_Object Vw32_num_mouse_buttons; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
291 |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
292 Lisp_Object Vw32_swap_mouse_buttons; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
293 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
294 /* Control whether x_raise_frame also sets input focus. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
295 Lisp_Object Vw32_grab_focus_on_raise; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
296 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
297 /* Control whether Caps Lock affects non-ascii characters. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
298 Lisp_Object Vw32_capslock_is_shiftlock; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
299 |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
300 /* Control whether right-alt and left-ctrl should be recognized as AltGr. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
301 Lisp_Object Vw32_recognize_altgr; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
302 |
| 13434 | 303 /* The scroll bar in which the last motion event occurred. |
| 304 | |
| 305 If the last motion event occurred in a scroll bar, we set this | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
306 so w32_mouse_position can know whether to report a scroll bar motion or |
| 13434 | 307 an ordinary motion. |
| 308 | |
| 309 If the last motion event didn't occur in a scroll bar, we set this | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
310 to Qnil, to tell w32_mouse_position to return an ordinary motion event. */ |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
311 static Lisp_Object last_mouse_scroll_bar; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
312 static int last_mouse_scroll_bar_pos; |
| 13434 | 313 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
314 /* This is a hack. We would really prefer that w32_mouse_position would |
| 13434 | 315 return the time associated with the position it returns, but there |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
316 doesn't seem to be any way to wrest the time-stamp from the server |
| 13434 | 317 along with the position query. So, we just keep track of the time |
| 318 of the last movement we received, and return that in hopes that | |
| 319 it's somewhat accurate. */ | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
320 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
321 static Time last_mouse_movement_time; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
322 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
323 /* Incremented by w32_read_socket whenever it really tries to read |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
324 events. */ |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
325 |
| 13434 | 326 #ifdef __STDC__ |
| 327 static int volatile input_signal_count; | |
| 328 #else | |
| 329 static int input_signal_count; | |
| 330 #endif | |
| 331 | |
| 332 extern Lisp_Object Vcommand_line_args, Vsystem_name; | |
| 333 | |
| 334 extern Lisp_Object Qface, Qmouse_face; | |
| 335 | |
|
31116
bbd7763673b6
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
31010
diff
changeset
|
336 #ifndef USE_CRT_DLL |
| 13434 | 337 extern int errno; |
|
31116
bbd7763673b6
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
31010
diff
changeset
|
338 #endif |
| 13434 | 339 |
| 340 /* A mask of extra modifier bits to put into every keyboard char. */ | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
341 |
|
43713
f92c4d87863a
Change defvar_int def and vars to use EMACS_INT instead of just int.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43694
diff
changeset
|
342 extern EMACS_INT extra_keyboard_modifiers; |
| 13434 | 343 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
344 /* Enumeration for overriding/changing the face to use for drawing |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
345 glyphs in x_draw_glyphs. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
346 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
347 enum draw_glyphs_face |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
348 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
349 DRAW_NORMAL_TEXT, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
350 DRAW_INVERSE_VIDEO, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
351 DRAW_CURSOR, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
352 DRAW_MOUSE_FACE, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
353 DRAW_IMAGE_RAISED, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
354 DRAW_IMAGE_SUNKEN |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
355 }; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
356 |
|
31116
bbd7763673b6
Include keyboard.h before frame.h.
Andrew Innes <andrewi@gnu.org>
parents:
31010
diff
changeset
|
357 static void x_update_window_end P_ ((struct window *, int, int)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
358 static void frame_to_window_pixel_xy P_ ((struct window *, int *, int *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
359 void w32_delete_display P_ ((struct w32_display_info *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
360 static int fast_find_position P_ ((struct window *, int, int *, int *, |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
361 int *, int *, Lisp_Object)); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
362 static int fast_find_string_pos P_ ((struct window *, int, Lisp_Object, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
363 int *, int *, int *, int *, int)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
364 static void set_output_cursor P_ ((struct cursor_pos *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
365 static struct glyph *x_y_to_hpos_vpos P_ ((struct window *, int, int, |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
366 int *, int *, int *, int)); |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
367 static void note_mode_line_or_margin_highlight P_ ((struct window *, int, |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
368 int, int)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
369 static void note_mouse_highlight P_ ((struct frame *, int, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
370 static void note_tool_bar_highlight P_ ((struct frame *f, int, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
371 static void w32_handle_tool_bar_click P_ ((struct frame *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
372 struct input_event *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
373 static void show_mouse_face P_ ((struct w32_display_info *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
374 enum draw_glyphs_face)); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
375 static int cursor_in_mouse_face_p P_ ((struct window *)); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
376 static int clear_mouse_face P_ ((struct w32_display_info *)); |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
377 void w32_define_cursor P_ ((Window, Cursor)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
378 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
379 void x_lower_frame P_ ((struct frame *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
380 void x_scroll_bar_clear P_ ((struct frame *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
381 void x_wm_set_size_hint P_ ((struct frame *, long, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
382 void x_raise_frame P_ ((struct frame *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
383 void x_set_window_size P_ ((struct frame *, int, int, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
384 void x_wm_set_window_state P_ ((struct frame *, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
385 void x_wm_set_icon_pixmap P_ ((struct frame *, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
386 void w32_initialize P_ ((void)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
387 static void x_font_min_bounds P_ ((XFontStruct *, int *, int *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
388 int x_compute_min_glyph_bounds P_ ((struct frame *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
389 static void x_draw_phys_cursor_glyph P_ ((struct window *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
390 struct glyph_row *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
391 enum draw_glyphs_face)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
392 static void x_update_end P_ ((struct frame *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
393 static void w32_frame_up_to_date P_ ((struct frame *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
394 static void w32_set_terminal_modes P_ ((void)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
395 static void w32_reset_terminal_modes P_ ((void)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
396 static void w32_cursor_to P_ ((int, int, int, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
397 static void x_write_glyphs P_ ((struct glyph *, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
398 static void x_clear_end_of_line P_ ((int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
399 static void x_clear_frame P_ ((void)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
400 static void x_clear_cursor P_ ((struct window *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
401 static void frame_highlight P_ ((struct frame *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
402 static void frame_unhighlight P_ ((struct frame *)); |
|
42844
38ae31587c80
(w32_native_per_char_metric): Don't trust the metrics
Jason Rumney <jasonr@gnu.org>
parents:
42794
diff
changeset
|
403 static void x_new_focus_frame P_ ((struct w32_display_info *, |
|
38ae31587c80
(w32_native_per_char_metric): Don't trust the metrics
Jason Rumney <jasonr@gnu.org>
parents:
42794
diff
changeset
|
404 struct frame *)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
405 static void w32_frame_rehighlight P_ ((struct frame *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
406 static void x_frame_rehighlight P_ ((struct w32_display_info *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
407 static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *)); |
|
45507
b69bbd1285d1
(x_draw_bar_cursor): Update parameter list in declaration.
Jason Rumney <jasonr@gnu.org>
parents:
45467
diff
changeset
|
408 static void x_draw_bar_cursor P_ ((struct window *, struct glyph_row *, int, |
|
b69bbd1285d1
(x_draw_bar_cursor): Update parameter list in declaration.
Jason Rumney <jasonr@gnu.org>
parents:
45467
diff
changeset
|
409 enum text_cursor_kinds)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
410 static void expose_frame P_ ((struct frame *, int, int, int, int)); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
411 static int expose_window_tree P_ ((struct window *, RECT *)); |
|
47099
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
412 static void expose_overlaps P_ ((struct window *, struct glyph_row *, |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
413 struct glyph_row *)); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
414 static int expose_window P_ ((struct window *, RECT *)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
415 static void expose_area P_ ((struct window *, struct glyph_row *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
416 RECT *, enum glyph_row_area)); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
417 static int expose_line P_ ((struct window *, struct glyph_row *, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
418 RECT *)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
419 void x_update_cursor P_ ((struct frame *, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
420 static void x_update_cursor_in_window_tree P_ ((struct window *, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
421 static void x_update_window_cursor P_ ((struct window *, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
422 static void x_erase_phys_cursor P_ ((struct window *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
423 void x_display_cursor P_ ((struct window *w, int, int, int, int, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
424 void x_display_and_set_cursor P_ ((struct window *, int, int, int, int, int)); |
|
42538
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
425 static void w32_draw_fringe_bitmap P_ ((struct window *, HDC hdc, |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
426 struct glyph_row *, |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
427 enum fringe_bitmap_type, int left_p)); |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
428 static void w32_clip_to_row P_ ((struct window *, struct glyph_row *, |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
429 HDC, int)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
430 static int x_phys_cursor_in_rect_p P_ ((struct window *, RECT *)); |
|
42538
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
431 static void x_draw_row_fringe_bitmaps P_ ((struct window *, |
|
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
432 struct glyph_row *)); |
|
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
433 static void notice_overwritten_cursor P_ ((struct window *, |
|
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
434 enum glyph_row_area, |
|
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
435 int, int, int, int)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
436 |
| 13434 | 437 static Lisp_Object Qvendor_specific_keysyms; |
| 438 | |
| 439 | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
440 /*********************************************************************** |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
441 Debugging |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
442 ***********************************************************************/ |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
443 |
| 13434 | 444 #if 0 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
445 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
446 /* This is a function useful for recording debugging information about |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
447 the sequence of occurrences in this file. */ |
| 13434 | 448 |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
449 struct record |
| 13434 | 450 { |
| 451 char *locus; | |
| 452 int type; | |
| 453 }; | |
| 454 | |
| 455 struct record event_record[100]; | |
| 456 | |
| 457 int event_record_index; | |
| 458 | |
| 459 record_event (locus, type) | |
| 460 char *locus; | |
| 461 int type; | |
| 462 { | |
| 463 if (event_record_index == sizeof (event_record) / sizeof (struct record)) | |
| 464 event_record_index = 0; | |
| 465 | |
| 466 event_record[event_record_index].locus = locus; | |
| 467 event_record[event_record_index].type = type; | |
| 468 event_record_index++; | |
| 469 } | |
| 470 | |
| 471 #endif /* 0 */ | |
| 472 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
473 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
474 void XChangeGC (void * ignore, XGCValues* gc, unsigned long mask, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
475 XGCValues *xgcv) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
476 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
477 if (mask & GCForeground) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
478 gc->foreground = xgcv->foreground; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
479 if (mask & GCBackground) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
480 gc->background = xgcv->background; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
481 if (mask & GCFont) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
482 gc->font = xgcv->font; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
483 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
484 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
485 XGCValues *XCreateGC (void * ignore, Window window, unsigned long mask, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
486 XGCValues *xgcv) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
487 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
488 XGCValues *gc = (XGCValues *) xmalloc (sizeof (XGCValues)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
489 bzero (gc, sizeof (XGCValues)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
490 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
491 XChangeGC (ignore, gc, mask, xgcv); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
492 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
493 return gc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
494 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
495 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
496 void XGetGCValues (void* ignore, XGCValues *gc, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
497 unsigned long mask, XGCValues *xgcv) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
498 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
499 XChangeGC (ignore, xgcv, mask, gc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
500 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
501 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
502 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
503 w32_set_clip_rectangle (HDC hdc, RECT *rect) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
504 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
505 if (rect) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
506 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
507 HRGN clip_region = CreateRectRgnIndirect (rect); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
508 SelectClipRgn (hdc, clip_region); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
509 DeleteObject (clip_region); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
510 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
511 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
512 SelectClipRgn (hdc, NULL); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
513 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
514 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
515 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
516 /* Draw a hollow rectangle at the specified position. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
517 void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
518 w32_draw_rectangle (HDC hdc, XGCValues *gc, int x, int y, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
519 int width, int height) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
520 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
521 HBRUSH hb, oldhb; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
522 HPEN hp, oldhp; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
523 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
524 hb = CreateSolidBrush (gc->background); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
525 hp = CreatePen (PS_SOLID, 0, gc->foreground); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
526 oldhb = SelectObject (hdc, hb); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
527 oldhp = SelectObject (hdc, hp); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
528 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
529 Rectangle (hdc, x, y, x + width, y + height); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
530 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
531 SelectObject (hdc, oldhb); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
532 SelectObject (hdc, oldhp); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
533 DeleteObject (hb); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
534 DeleteObject (hp); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
535 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
536 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
537 /* Draw a filled rectangle at the specified position. */ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
538 void |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
539 w32_fill_rect (f, hdc, pix, lprect) |
| 13434 | 540 FRAME_PTR f; |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
541 HDC hdc; |
| 13434 | 542 COLORREF pix; |
| 543 RECT * lprect; | |
| 544 { | |
| 545 HBRUSH hb; | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
546 |
| 13434 | 547 hb = CreateSolidBrush (pix); |
| 548 FillRect (hdc, lprect, hb); | |
| 549 DeleteObject (hb); | |
| 550 } | |
| 551 | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
552 void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
553 w32_clear_window (f) |
| 13434 | 554 FRAME_PTR f; |
| 555 { | |
| 556 RECT rect; | |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
557 HDC hdc = get_frame_dc (f); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
558 |
|
34093
d554a3ac3039
(x_draw_vertical_border): Fix call to w32_fill_rect.
Jason Rumney <jasonr@gnu.org>
parents:
33766
diff
changeset
|
559 /* Under certain conditions, this can be called at startup with |
|
d554a3ac3039
(x_draw_vertical_border): Fix call to w32_fill_rect.
Jason Rumney <jasonr@gnu.org>
parents:
33766
diff
changeset
|
560 a console frame pointer before the GUI frame is created. An HDC |
|
d554a3ac3039
(x_draw_vertical_border): Fix call to w32_fill_rect.
Jason Rumney <jasonr@gnu.org>
parents:
33766
diff
changeset
|
561 of 0 indicates this. */ |
|
d554a3ac3039
(x_draw_vertical_border): Fix call to w32_fill_rect.
Jason Rumney <jasonr@gnu.org>
parents:
33766
diff
changeset
|
562 if (hdc) |
|
d554a3ac3039
(x_draw_vertical_border): Fix call to w32_fill_rect.
Jason Rumney <jasonr@gnu.org>
parents:
33766
diff
changeset
|
563 { |
|
d554a3ac3039
(x_draw_vertical_border): Fix call to w32_fill_rect.
Jason Rumney <jasonr@gnu.org>
parents:
33766
diff
changeset
|
564 GetClientRect (FRAME_W32_WINDOW (f), &rect); |
|
d554a3ac3039
(x_draw_vertical_border): Fix call to w32_fill_rect.
Jason Rumney <jasonr@gnu.org>
parents:
33766
diff
changeset
|
565 w32_clear_rect (f, hdc, &rect); |
|
d554a3ac3039
(x_draw_vertical_border): Fix call to w32_fill_rect.
Jason Rumney <jasonr@gnu.org>
parents:
33766
diff
changeset
|
566 } |
|
d554a3ac3039
(x_draw_vertical_border): Fix call to w32_fill_rect.
Jason Rumney <jasonr@gnu.org>
parents:
33766
diff
changeset
|
567 |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
568 release_frame_dc (f, hdc); |
| 13434 | 569 } |
| 570 | |
| 571 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
572 /*********************************************************************** |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
573 Starting and ending an update |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
574 ***********************************************************************/ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
575 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
576 /* Start an update of frame F. This function is installed as a hook |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
577 for update_begin, i.e. it is called when update_begin is called. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
578 This function is called prior to calls to x_update_window_begin for |
|
34784
d140f5fb3307
(x_update_begin): Regenerate the palette here, rather
Andrew Innes <andrewi@gnu.org>
parents:
34779
diff
changeset
|
579 each window being updated. */ |
| 13434 | 580 |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
581 static void |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
582 x_update_begin (f) |
| 13434 | 583 struct frame *f; |
| 584 { | |
|
34784
d140f5fb3307
(x_update_begin): Regenerate the palette here, rather
Andrew Innes <andrewi@gnu.org>
parents:
34779
diff
changeset
|
585 struct w32_display_info *display_info = FRAME_W32_DISPLAY_INFO (f); |
|
d140f5fb3307
(x_update_begin): Regenerate the palette here, rather
Andrew Innes <andrewi@gnu.org>
parents:
34779
diff
changeset
|
586 |
| 35000 | 587 if (! FRAME_W32_P (f)) |
| 588 return; | |
| 589 | |
|
34784
d140f5fb3307
(x_update_begin): Regenerate the palette here, rather
Andrew Innes <andrewi@gnu.org>
parents:
34779
diff
changeset
|
590 /* Regenerate display palette before drawing if list of requested |
|
d140f5fb3307
(x_update_begin): Regenerate the palette here, rather
Andrew Innes <andrewi@gnu.org>
parents:
34779
diff
changeset
|
591 colors has changed. */ |
|
d140f5fb3307
(x_update_begin): Regenerate the palette here, rather
Andrew Innes <andrewi@gnu.org>
parents:
34779
diff
changeset
|
592 if (display_info->regen_palette) |
|
d140f5fb3307
(x_update_begin): Regenerate the palette here, rather
Andrew Innes <andrewi@gnu.org>
parents:
34779
diff
changeset
|
593 { |
|
d140f5fb3307
(x_update_begin): Regenerate the palette here, rather
Andrew Innes <andrewi@gnu.org>
parents:
34779
diff
changeset
|
594 w32_regenerate_palette (f); |
|
d140f5fb3307
(x_update_begin): Regenerate the palette here, rather
Andrew Innes <andrewi@gnu.org>
parents:
34779
diff
changeset
|
595 display_info->regen_palette = FALSE; |
|
d140f5fb3307
(x_update_begin): Regenerate the palette here, rather
Andrew Innes <andrewi@gnu.org>
parents:
34779
diff
changeset
|
596 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
597 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
598 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
599 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
600 /* Start update of window W. Set the global variable updated_window |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
601 to the window being updated and set output_cursor to the cursor |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
602 position of W. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
603 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
604 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
605 x_update_window_begin (w) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
606 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
607 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
608 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
609 struct w32_display_info *display_info = FRAME_W32_DISPLAY_INFO (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
610 |
|
42864
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
611 /* Hide the system caret during an update. */ |
|
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48819
diff
changeset
|
612 if (w32_use_visible_system_caret && w32_system_caret_hwnd) |
|
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48819
diff
changeset
|
613 { |
|
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48819
diff
changeset
|
614 SendMessage (w32_system_caret_hwnd, WM_EMACS_HIDE_CARET, 0, 0); |
|
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48819
diff
changeset
|
615 } |
|
42864
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
616 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
617 updated_window = w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
618 set_output_cursor (&w->cursor); |
| 13434 | 619 |
| 620 BLOCK_INPUT; | |
| 621 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
622 if (f == display_info->mouse_face_mouse_frame) |
| 13434 | 623 { |
| 624 /* Don't do highlighting for mouse motion during the update. */ | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
625 display_info->mouse_face_defer = 1; |
| 13434 | 626 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
627 /* If F needs to be redrawn, simply forget about any prior mouse |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
628 highlighting. */ |
| 13434 | 629 if (FRAME_GARBAGED_P (f)) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
630 display_info->mouse_face_window = Qnil; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
631 |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
632 #if 0 /* Rows in a current matrix containing glyphs in mouse-face have |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
633 their mouse_face_p flag set, which means that they are always |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
634 unequal to rows in a desired matrix which never have that |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
635 flag set. So, rows containing mouse-face glyphs are never |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
636 scrolled, and we don't have to switch the mouse highlight off |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
637 here to prevent it from being scrolled. */ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
638 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
639 /* Can we tell that this update does not affect the window |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
640 where the mouse highlight is? If so, no need to turn off. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
641 Likewise, don't do anything if the frame is garbaged; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
642 in that case, the frame's current matrix that we would use |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
643 is all wrong, and we will redisplay that line anyway. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
644 if (!NILP (display_info->mouse_face_window) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
645 && w == XWINDOW (display_info->mouse_face_window)) |
| 13434 | 646 { |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
647 int i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
648 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
649 for (i = 0; i < w->desired_matrix->nrows; ++i) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
650 if (MATRIX_ROW_ENABLED_P (w->desired_matrix, i)) |
| 13434 | 651 break; |
| 652 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
653 if (i < w->desired_matrix->nrows) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
654 clear_mouse_face (display_info); |
| 13434 | 655 } |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
656 #endif /* 0 */ |
| 13434 | 657 } |
| 658 | |
| 659 UNBLOCK_INPUT; | |
| 660 } | |
| 661 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
662 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
663 /* Draw a vertical window border to the right of window W if W doesn't |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
664 have vertical scroll bars. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
665 |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
666 static void |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
667 x_draw_vertical_border (w) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
668 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
669 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
670 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
671 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
672 /* Redraw borders between horizontally adjacent windows. Don't |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
673 do it for frames with vertical scroll bars because either the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
674 right scroll bar of a window, or the left scroll bar of its |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
675 neighbor will suffice as a border. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
676 if (!WINDOW_RIGHTMOST_P (w) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
677 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
678 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
679 RECT r; |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
680 HDC hdc; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
681 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
682 window_box_edges (w, -1, (int *) &r.left, (int *) &r.top, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
683 (int *) &r.right, (int *) &r.bottom); |
| 41125 | 684 r.left = r.right + FRAME_X_RIGHT_FRINGE_WIDTH (f); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
685 r.right = r.left + 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
686 r.bottom -= 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
687 |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
688 hdc = get_frame_dc (f); |
|
34093
d554a3ac3039
(x_draw_vertical_border): Fix call to w32_fill_rect.
Jason Rumney <jasonr@gnu.org>
parents:
33766
diff
changeset
|
689 w32_fill_rect (f, hdc, FRAME_FOREGROUND_PIXEL (f), &r); |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
690 release_frame_dc (f, hdc); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
691 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
692 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
693 |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
694 |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
695 /* End update of window W (which is equal to updated_window). |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
696 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
697 Draw vertical borders between horizontally adjacent windows, and |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
698 display W's cursor if CURSOR_ON_P is non-zero. |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
699 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
700 MOUSE_FACE_OVERWRITTEN_P non-zero means that some row containing |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
701 glyphs in mouse-face were overwritten. In that case we have to |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
702 make sure that the mouse-highlight is properly redrawn. |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
703 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
704 W may be a menu bar pseudo-window in case we don't have X toolkit |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
705 support. Such windows don't have a cursor, so don't display it |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
706 here. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
707 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
708 static void |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
709 x_update_window_end (w, cursor_on_p, mouse_face_overwritten_p) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
710 struct window *w; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
711 int cursor_on_p, mouse_face_overwritten_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
712 { |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
713 struct w32_display_info *dpyinfo |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
714 = FRAME_W32_DISPLAY_INFO (XFRAME (w->frame)); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
715 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
716 if (!w->pseudo_window_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
717 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
718 BLOCK_INPUT; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
719 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
720 if (cursor_on_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
721 x_display_and_set_cursor (w, 1, output_cursor.hpos, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
722 output_cursor.vpos, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
723 output_cursor.x, output_cursor.y); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
724 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
725 x_draw_vertical_border (w); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
726 UNBLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
727 } |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
728 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
729 /* If a row with mouse-face was overwritten, arrange for |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
730 XTframe_up_to_date to redisplay the mouse highlight. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
731 if (mouse_face_overwritten_p) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
732 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
733 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
734 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
735 dpyinfo->mouse_face_window = Qnil; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
736 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
737 |
|
42864
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
738 /* Unhide the caret. This won't actually show the cursor, unless it |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
739 was visible before the corresponding call to HideCaret in |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
740 x_update_window_begin. */ |
|
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48819
diff
changeset
|
741 if (w32_use_visible_system_caret && w32_system_caret_hwnd) |
|
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48819
diff
changeset
|
742 { |
|
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48819
diff
changeset
|
743 SendMessage (w32_system_caret_hwnd, WM_EMACS_SHOW_CARET, 0, 0); |
|
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48819
diff
changeset
|
744 } |
|
42864
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
745 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
746 updated_window = NULL; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
747 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
748 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
749 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
750 /* End update of frame F. This function is installed as a hook in |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
751 update_end. */ |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
752 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
753 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
754 x_update_end (f) |
| 13434 | 755 struct frame *f; |
| 756 { | |
| 35000 | 757 if (! FRAME_W32_P (f)) |
| 758 return; | |
| 759 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
760 /* Mouse highlight may be displayed again. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
761 FRAME_W32_DISPLAY_INFO (f)->mouse_face_defer = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
762 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
763 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
764 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
765 /* This function is called from various places in xdisp.c whenever a |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
766 complete update has been performed. The global variable |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
767 updated_window is not available here. */ |
| 13434 | 768 |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
769 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
770 w32_frame_up_to_date (f) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
771 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
772 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
773 if (FRAME_W32_P (f)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
774 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
775 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
776 if (dpyinfo->mouse_face_deferred_gc |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
777 || f == dpyinfo->mouse_face_mouse_frame) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
778 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
779 BLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
780 if (dpyinfo->mouse_face_mouse_frame) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
781 note_mouse_highlight (dpyinfo->mouse_face_mouse_frame, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
782 dpyinfo->mouse_face_mouse_x, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
783 dpyinfo->mouse_face_mouse_y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
784 dpyinfo->mouse_face_deferred_gc = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
785 UNBLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
786 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
787 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
788 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
789 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
790 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
791 /* Draw truncation mark bitmaps, continuation mark bitmaps, overlay |
| 41125 | 792 arrow bitmaps, or clear the fringes if no bitmaps are required |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
793 before DESIRED_ROW is made current. The window being updated is |
|
41447
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
794 found in updated_window. This function is called from |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
795 update_window_line only if it is known that there are differences |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
796 between bitmaps to be drawn between current row and DESIRED_ROW. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
797 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
798 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
799 x_after_update_window_line (desired_row) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
800 struct glyph_row *desired_row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
801 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
802 struct window *w = updated_window; |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
803 struct frame *f; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
804 int width, height; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
805 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
806 xassert (w); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
807 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
808 if (!desired_row->mode_line_p && !w->pseudo_window_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
809 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
810 BLOCK_INPUT; |
| 41125 | 811 x_draw_row_fringe_bitmaps (w, desired_row); |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
812 UNBLOCK_INPUT; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
813 } |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
814 |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
815 /* When a window has disappeared, make sure that no rest of |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
816 full-width rows stays visible in the internal border. Could |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
817 check here if updated_window is the leftmost/rightmost window, |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
818 but I guess it's not worth doing since vertically split windows |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
819 are almost never used, internal border is rarely set, and the |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
820 overhead is very small. */ |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
821 if (windows_or_buffers_changed |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
822 && desired_row->full_width_p |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
823 && (f = XFRAME (w->frame), |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
824 width = FRAME_INTERNAL_BORDER_WIDTH (f), |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
825 width != 0) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
826 && (height = desired_row->visible_height, |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
827 height > 0)) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
828 { |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
829 int y = WINDOW_TO_FRAME_PIXEL_Y (w, max (0, desired_row->y)); |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
830 /* Internal border is drawn below the tool bar. */ |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
831 if (WINDOWP (f->tool_bar_window) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
832 && w == XWINDOW (f->tool_bar_window)) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
833 y -= width; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
834 |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
835 BLOCK_INPUT; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
836 { |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
837 HDC hdc = get_frame_dc (f); |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
838 w32_clear_area (f, hdc, 0, y, width, height); |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
839 w32_clear_area (f, hdc, f->output_data.w32->pixel_width - width, |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
840 y, width, height); |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
841 release_frame_dc (f, hdc); |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
842 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
843 UNBLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
844 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
845 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
846 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
847 |
| 41125 | 848 /* Draw the bitmap WHICH in one of the left or right fringes of |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
849 window W. ROW is the glyph row for which to display the bitmap; it |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
850 determines the vertical position at which the bitmap has to be |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
851 drawn. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
852 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
853 static void |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
854 w32_draw_fringe_bitmap (w, hdc, row, which, left_p) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
855 struct window *w; |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
856 HDC hdc; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
857 struct glyph_row *row; |
| 41125 | 858 enum fringe_bitmap_type which; |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
859 int left_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
860 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
861 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
862 HDC compat_hdc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
863 int x, y, wd, h, dy; |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
864 int b1, b2; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
865 HBITMAP pixmap; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
866 HANDLE horig_obj; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
867 struct face *face; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
868 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
869 /* Must clip because of partially visible lines. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
870 w32_clip_to_row (w, row, hdc, 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
871 |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
872 /* Convert row to frame coordinates. */ |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
873 y = WINDOW_TO_FRAME_PIXEL_Y (w, row->y); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
874 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
875 switch (which) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
876 { |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
877 case NO_FRINGE_BITMAP: |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
878 wd = 0; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
879 h = 0; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
880 break; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
881 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
882 case LEFT_TRUNCATION_BITMAP: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
883 wd = left_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
884 h = left_height; |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
885 pixmap = left_bmp; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
886 break; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
887 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
888 case OVERLAY_ARROW_BITMAP: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
889 wd = ov_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
890 h = ov_height; |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
891 pixmap = ov_bmp; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
892 break; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
893 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
894 case RIGHT_TRUNCATION_BITMAP: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
895 wd = right_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
896 h = right_height; |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
897 pixmap = right_bmp; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
898 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
899 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
900 case CONTINUED_LINE_BITMAP: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
901 wd = continued_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
902 h = continued_height; |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
903 pixmap = continued_bmp; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
904 break; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
905 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
906 case CONTINUATION_LINE_BITMAP: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
907 wd = continuation_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
908 h = continuation_height; |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
909 pixmap = continuation_bmp; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
910 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
911 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
912 case ZV_LINE_BITMAP: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
913 wd = zv_width; |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
914 h = zv_height - (y % zv_period); |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
915 pixmap = zv_bmp; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
916 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
917 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
918 default: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
919 abort (); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
920 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
921 |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
922 /* Clip bitmap if too high. */ |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
923 if (h > row->height) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
924 h = row->height; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
925 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
926 /* Set dy to the offset in the row to start drawing the bitmap. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
927 dy = (row->height - h) / 2; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
928 |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
929 /* Draw the bitmap. */ |
| 41125 | 930 face = FACE_FROM_ID (f, FRINGE_FACE_ID); |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
931 PREPARE_FACE_FOR_DISPLAY (f, face); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
932 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
933 /* Clear left fringe if no bitmap to draw or if bitmap doesn't fill |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
934 the fringe. */ |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
935 b1 = -1; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
936 if (left_p) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
937 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
938 if (wd > FRAME_X_LEFT_FRINGE_WIDTH (f)) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
939 wd = FRAME_X_LEFT_FRINGE_WIDTH (f); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
940 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
941 - wd |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
942 - (FRAME_X_LEFT_FRINGE_WIDTH (f) - wd) / 2); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
943 if (wd < FRAME_X_LEFT_FRINGE_WIDTH (f) || row->height > h) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
944 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
945 /* If W has a vertical border to its left, don't draw over it. */ |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
946 int border = ((XFASTINT (w->left) > 0 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
947 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
948 ? 1 : 0); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
949 b1 = (window_box_left (w, -1) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
950 - FRAME_X_LEFT_FRINGE_WIDTH (f) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
951 + border); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
952 b2 = (FRAME_X_LEFT_FRINGE_WIDTH (f) - border); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
953 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
954 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
955 else |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
956 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
957 if (wd > FRAME_X_RIGHT_FRINGE_WIDTH (f)) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
958 wd = FRAME_X_RIGHT_FRINGE_WIDTH (f); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
959 x = (window_box_right (w, -1) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
960 + (FRAME_X_RIGHT_FRINGE_WIDTH (f) - wd) / 2); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
961 /* Clear right fringe if no bitmap to draw of if bitmap doesn't fill |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
962 the fringe. */ |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
963 if (wd < FRAME_X_RIGHT_FRINGE_WIDTH (f) || row->height > h) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
964 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
965 b1 = window_box_right (w, -1); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
966 b2 = FRAME_X_RIGHT_FRINGE_WIDTH (f); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
967 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
968 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
969 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
970 if (b1 >= 0) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
971 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
972 int header_line_height = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (w); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
973 |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
974 w32_fill_area (f, hdc, face->background, |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
975 b1, |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
976 WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
977 row->y)), |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
978 b2, |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
979 row->visible_height); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
980 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
981 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
982 if (which == NO_FRINGE_BITMAP) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
983 return; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
984 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
985 compat_hdc = CreateCompatibleDC (hdc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
986 SaveDC (hdc); |
|
34823
ace8dd8cf098
(w32_draw_bitmap): Fix drawing so it does not appear in the wrong colors
Jason Rumney <jasonr@gnu.org>
parents:
34784
diff
changeset
|
987 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
988 horig_obj = SelectObject (compat_hdc, pixmap); |
|
34823
ace8dd8cf098
(w32_draw_bitmap): Fix drawing so it does not appear in the wrong colors
Jason Rumney <jasonr@gnu.org>
parents:
34784
diff
changeset
|
989 SetTextColor (hdc, face->background); |
|
ace8dd8cf098
(w32_draw_bitmap): Fix drawing so it does not appear in the wrong colors
Jason Rumney <jasonr@gnu.org>
parents:
34784
diff
changeset
|
990 SetBkColor (hdc, face->foreground); |
|
ace8dd8cf098
(w32_draw_bitmap): Fix drawing so it does not appear in the wrong colors
Jason Rumney <jasonr@gnu.org>
parents:
34784
diff
changeset
|
991 |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
992 BitBlt (hdc, x, y + dy, wd, h, compat_hdc, 0, |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
993 (which == ZV_LINE_BITMAP ? (row->y % zv_period) : 0), |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
994 SRCCOPY); |
|
34823
ace8dd8cf098
(w32_draw_bitmap): Fix drawing so it does not appear in the wrong colors
Jason Rumney <jasonr@gnu.org>
parents:
34784
diff
changeset
|
995 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
996 SelectObject (compat_hdc, horig_obj); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
997 DeleteDC (compat_hdc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
998 RestoreDC (hdc, -1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
999 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1000 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1001 |
| 41125 | 1002 /* Draw fringe bitmaps for glyph row ROW on window W. Call this |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1003 function with input blocked. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1004 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1005 static void |
| 41125 | 1006 x_draw_row_fringe_bitmaps (w, row) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1007 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1008 struct glyph_row *row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1009 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1010 struct frame *f = XFRAME (w->frame); |
| 41125 | 1011 enum fringe_bitmap_type bitmap; |
|
35678
c2f95853d4c4
(x_draw_row_bitmaps): Delay obtaining HDC to avoid returning without
Eli Zaretskii <eliz@gnu.org>
parents:
35449
diff
changeset
|
1012 HDC hdc; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1013 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1014 xassert (interrupt_input_blocked); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1015 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1016 /* If row is completely invisible, because of vscrolling, we |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1017 don't have to draw anything. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1018 if (row->visible_height <= 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1019 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1020 |
|
35678
c2f95853d4c4
(x_draw_row_bitmaps): Delay obtaining HDC to avoid returning without
Eli Zaretskii <eliz@gnu.org>
parents:
35449
diff
changeset
|
1021 hdc = get_frame_dc (f); |
|
c2f95853d4c4
(x_draw_row_bitmaps): Delay obtaining HDC to avoid returning without
Eli Zaretskii <eliz@gnu.org>
parents:
35449
diff
changeset
|
1022 |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1023 if (FRAME_X_LEFT_FRINGE_WIDTH (f) != 0) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1024 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1025 /* Decide which bitmap to draw in the left fringe. */ |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1026 if (row->overlay_arrow_p) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1027 bitmap = OVERLAY_ARROW_BITMAP; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1028 else if (row->truncated_on_left_p) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1029 bitmap = LEFT_TRUNCATION_BITMAP; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1030 else if (MATRIX_ROW_CONTINUATION_LINE_P (row)) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1031 bitmap = CONTINUATION_LINE_BITMAP; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1032 else if (row->indicate_empty_line_p) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1033 bitmap = ZV_LINE_BITMAP; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1034 else |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1035 bitmap = NO_FRINGE_BITMAP; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1036 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1037 w32_draw_fringe_bitmap (w, hdc, row, bitmap, 1); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1038 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1039 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1040 if (FRAME_X_RIGHT_FRINGE_WIDTH (f) != 0) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1041 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1042 /* Decide which bitmap to draw in the right fringe. */ |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1043 if (row->truncated_on_right_p) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1044 bitmap = RIGHT_TRUNCATION_BITMAP; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1045 else if (row->continued_p) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1046 bitmap = CONTINUED_LINE_BITMAP; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1047 else if (row->indicate_empty_line_p && FRAME_X_LEFT_FRINGE_WIDTH (f) == 0) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1048 bitmap = ZV_LINE_BITMAP; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1049 else |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1050 bitmap = NO_FRINGE_BITMAP; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1051 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1052 w32_draw_fringe_bitmap (w, hdc, row, bitmap, 0); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
1053 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1054 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1055 release_frame_dc (f, hdc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1056 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1057 |
| 13434 | 1058 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1059 /* This is called when starting Emacs and when restarting after |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1060 suspend. When starting Emacs, no window is mapped. And nothing |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1061 must be done to Emacs's own window if it is suspended (though that |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1062 rarely happens). */ |
| 13434 | 1063 |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
1064 static void |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
1065 w32_set_terminal_modes (void) |
| 13434 | 1066 { |
| 1067 } | |
| 1068 | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1069 /* This is called when exiting or suspending Emacs. Exiting will make |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1070 the W32 windows go away, and suspending requires no action. */ |
| 13434 | 1071 |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
1072 static void |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
1073 w32_reset_terminal_modes (void) |
| 13434 | 1074 { |
| 1075 } | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1076 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1077 |
| 13434 | 1078 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1079 /*********************************************************************** |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1080 Output Cursor |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1081 ***********************************************************************/ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1082 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1083 /* Set the global variable output_cursor to CURSOR. All cursor |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1084 positions are relative to updated_window. */ |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1085 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1086 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1087 set_output_cursor (cursor) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1088 struct cursor_pos *cursor; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1089 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1090 output_cursor.hpos = cursor->hpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1091 output_cursor.vpos = cursor->vpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1092 output_cursor.x = cursor->x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1093 output_cursor.y = cursor->y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1094 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1095 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1096 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1097 /* Set a nominal cursor position. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1098 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1099 HPOS and VPOS are column/row positions in a window glyph matrix. X |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1100 and Y are window text area relative pixel positions. |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1101 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1102 If this is done during an update, updated_window will contain the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1103 window that is being updated and the position is the future output |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1104 cursor position for that window. If updated_window is null, use |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1105 selected_window and display the cursor at the given position. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1106 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1107 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1108 w32_cursor_to (vpos, hpos, y, x) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1109 int vpos, hpos, y, x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1110 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1111 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1112 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1113 /* If updated_window is not set, work on selected_window. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1114 if (updated_window) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1115 w = updated_window; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1116 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1117 w = XWINDOW (selected_window); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1118 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1119 /* Set the output cursor. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1120 output_cursor.hpos = hpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1121 output_cursor.vpos = vpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1122 output_cursor.x = x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1123 output_cursor.y = y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1124 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1125 /* If not called as part of an update, really display the cursor. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1126 This will also set the cursor position of W. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1127 if (updated_window == NULL) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1128 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1129 BLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1130 x_display_cursor (w, 1, hpos, vpos, x, y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1131 UNBLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1132 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1133 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1134 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1135 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1136 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1137 /*********************************************************************** |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1138 Display Iterator |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1139 ***********************************************************************/ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1140 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1141 /* Function prototypes of this page. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1142 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1143 static struct face *x_get_glyph_face_and_encoding P_ ((struct frame *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1144 struct glyph *, |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
1145 wchar_t *, |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
1146 int *)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1147 static struct face *x_get_char_face_and_encoding P_ ((struct frame *, int, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1148 int, wchar_t *, int)); |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1149 static XCharStruct *w32_per_char_metric P_ ((XFontStruct *, |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1150 wchar_t *, |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1151 enum w32_char_font_type)); |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1152 static enum w32_char_font_type |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1153 w32_encode_char P_ ((int, wchar_t *, struct font_info *, int *)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1154 static void x_append_glyph P_ ((struct it *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1155 static void x_append_composite_glyph P_ ((struct it *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1156 static void x_append_stretch_glyph P_ ((struct it *it, Lisp_Object, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1157 int, int, double)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1158 static void x_produce_glyphs P_ ((struct it *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1159 static void x_produce_image_glyph P_ ((struct it *it)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1160 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1161 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1162 /* Dealing with bits of wchar_t as if they were an XChar2B. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1163 #define BUILD_WCHAR_T(byte1, byte2) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1164 ((wchar_t)((((byte1) & 0x00ff) << 8) | ((byte2) & 0x00ff))) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1165 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1166 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1167 #define BYTE1(ch) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1168 (((ch) & 0xff00) >> 8) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1169 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1170 #define BYTE2(ch) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1171 ((ch) & 0x00ff) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1172 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1173 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1174 /* Get metrics of character CHAR2B in FONT. Value is always non-null. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1175 If CHAR2B is not contained in FONT, the font's default character |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1176 metric is returned. */ |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1177 |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1178 static int |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1179 w32_bdf_per_char_metric (font, char2b, dim, pcm) |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1180 XFontStruct *font; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1181 wchar_t *char2b; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1182 int dim; |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1183 XCharStruct * pcm; |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1184 { |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1185 glyph_metric * bdf_metric; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1186 char buf[2]; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1187 |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1188 if (dim == 1) |
|
34112
adfe753a8c4e
(w32_bdf_per_char_metric): Dereference pointer correctly for single
Jason Rumney <jasonr@gnu.org>
parents:
34093
diff
changeset
|
1189 buf[0] = (char)(*char2b); |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1190 else |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1191 { |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1192 buf[0] = BYTE1 (*char2b); |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1193 buf[1] = BYTE2 (*char2b); |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1194 } |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1195 |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1196 bdf_metric = w32_BDF_TextMetric (font->bdf, buf, dim); |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1197 |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1198 if (bdf_metric) |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1199 { |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1200 pcm->width = bdf_metric->dwidth; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1201 pcm->lbearing = bdf_metric->bbox; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1202 pcm->rbearing = bdf_metric->dwidth |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1203 - (bdf_metric->bbox + bdf_metric->bbw); |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1204 pcm->ascent = bdf_metric->bboy + bdf_metric->bbh; |
|
33037
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1205 pcm->descent = -bdf_metric->bboy; |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1206 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1207 return 1; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1208 } |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1209 return 0; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1210 } |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1211 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1212 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1213 static int |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1214 w32_native_per_char_metric (font, char2b, font_type, pcm) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1215 XFontStruct *font; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1216 wchar_t *char2b; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1217 enum w32_char_font_type font_type; |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1218 XCharStruct * pcm; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1219 { |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1220 HDC hdc = GetDC (NULL); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1221 HFONT old_font; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1222 BOOL retval = FALSE; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1223 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1224 xassert (font && char2b); |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1225 xassert (font->hfont); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1226 xassert (font_type == UNICODE_FONT || font_type == ANSI_FONT); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1227 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1228 old_font = SelectObject (hdc, font->hfont); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1229 |
|
31624
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1230 if ((font->tm.tmPitchAndFamily & TMPF_TRUETYPE) != 0) |
|
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1231 { |
|
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1232 ABC char_widths; |
|
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1233 |
|
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1234 if (font_type == UNICODE_FONT) |
|
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1235 retval = GetCharABCWidthsW (hdc, *char2b, *char2b, &char_widths); |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1236 else |
|
31624
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1237 retval = GetCharABCWidthsA (hdc, *char2b, *char2b, &char_widths); |
|
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1238 |
|
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1239 if (retval) |
|
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1240 { |
|
43146
49ffe8f5efb6
(w32_native_per_char_metric): Disable 2002-01-20 change.
Jason Rumney <jasonr@gnu.org>
parents:
42934
diff
changeset
|
1241 #if 0 |
|
49ffe8f5efb6
(w32_native_per_char_metric): Disable 2002-01-20 change.
Jason Rumney <jasonr@gnu.org>
parents:
42934
diff
changeset
|
1242 /* Disabled until we can find a way to get the right results |
|
49ffe8f5efb6
(w32_native_per_char_metric): Disable 2002-01-20 change.
Jason Rumney <jasonr@gnu.org>
parents:
42934
diff
changeset
|
1243 on all versions of Windows. */ |
|
49ffe8f5efb6
(w32_native_per_char_metric): Disable 2002-01-20 change.
Jason Rumney <jasonr@gnu.org>
parents:
42934
diff
changeset
|
1244 |
|
42844
38ae31587c80
(w32_native_per_char_metric): Don't trust the metrics
Jason Rumney <jasonr@gnu.org>
parents:
42794
diff
changeset
|
1245 /* Don't trust the ABC widths. For synthesized fonts they are |
|
38ae31587c80
(w32_native_per_char_metric): Don't trust the metrics
Jason Rumney <jasonr@gnu.org>
parents:
42794
diff
changeset
|
1246 wrong, and so is the result of GetCharWidth()! */ |
|
38ae31587c80
(w32_native_per_char_metric): Don't trust the metrics
Jason Rumney <jasonr@gnu.org>
parents:
42794
diff
changeset
|
1247 int real_width; |
|
38ae31587c80
(w32_native_per_char_metric): Don't trust the metrics
Jason Rumney <jasonr@gnu.org>
parents:
42794
diff
changeset
|
1248 GetCharWidth (hdc, *char2b, *char2b, &real_width); |
|
43146
49ffe8f5efb6
(w32_native_per_char_metric): Disable 2002-01-20 change.
Jason Rumney <jasonr@gnu.org>
parents:
42934
diff
changeset
|
1249 #endif |
|
31624
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1250 pcm->width = char_widths.abcA + char_widths.abcB + char_widths.abcC; |
|
43146
49ffe8f5efb6
(w32_native_per_char_metric): Disable 2002-01-20 change.
Jason Rumney <jasonr@gnu.org>
parents:
42934
diff
changeset
|
1251 #if 0 |
|
42844
38ae31587c80
(w32_native_per_char_metric): Don't trust the metrics
Jason Rumney <jasonr@gnu.org>
parents:
42794
diff
changeset
|
1252 /* As far as I can tell, this is the best way to determine what |
|
38ae31587c80
(w32_native_per_char_metric): Don't trust the metrics
Jason Rumney <jasonr@gnu.org>
parents:
42794
diff
changeset
|
1253 ExtTextOut will do with the broken font. */ |
|
38ae31587c80
(w32_native_per_char_metric): Don't trust the metrics
Jason Rumney <jasonr@gnu.org>
parents:
42794
diff
changeset
|
1254 if (pcm->width != real_width) |
|
38ae31587c80
(w32_native_per_char_metric): Don't trust the metrics
Jason Rumney <jasonr@gnu.org>
parents:
42794
diff
changeset
|
1255 pcm->width = (pcm->width + real_width) / 2; |
|
43146
49ffe8f5efb6
(w32_native_per_char_metric): Disable 2002-01-20 change.
Jason Rumney <jasonr@gnu.org>
parents:
42934
diff
changeset
|
1256 #endif |
|
31624
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1257 pcm->lbearing = char_widths.abcA; |
|
42844
38ae31587c80
(w32_native_per_char_metric): Don't trust the metrics
Jason Rumney <jasonr@gnu.org>
parents:
42794
diff
changeset
|
1258 pcm->rbearing = char_widths.abcA + char_widths.abcB; |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1259 pcm->ascent = FONT_BASE (font); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1260 pcm->descent = FONT_DESCENT (font); |
|
31624
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1261 } |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1262 } |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1263 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1264 if (!retval) |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1265 { |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1266 /* Either font is not a True-type font, or GetCharABCWidthsW |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1267 failed (it is not supported on Windows 9x for instance), so we |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1268 can't determine the full info we would like. All is not lost |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1269 though - we can call GetTextExtentPoint32 to get rbearing and |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1270 deduce width based on the font's per-string overhang. lbearing |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1271 is assumed to be zero. */ |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
1272 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
1273 /* TODO: Some Thai characters (and other composites if Windows |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
1274 supports them) do have lbearing, and report their total width |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
1275 as zero. Need some way of handling them when |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
1276 GetCharABCWidthsW fails. */ |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1277 SIZE sz; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1278 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1279 if (font_type == UNICODE_FONT) |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1280 retval = GetTextExtentPoint32W (hdc, char2b, 1, &sz); |
|
31624
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1281 else |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1282 retval = GetTextExtentPoint32A (hdc, (char*)char2b, 1, &sz); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1283 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1284 if (retval) |
|
31624
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1285 { |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1286 pcm->width = sz.cx - font->tm.tmOverhang; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1287 pcm->rbearing = sz.cx; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1288 pcm->lbearing = 0; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1289 pcm->ascent = FONT_BASE (font); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1290 pcm->descent = FONT_DESCENT (font); |
|
31624
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1291 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1292 } |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1293 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1294 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1295 if (pcm->width == 0 && (pcm->rbearing - pcm->lbearing) == 0) |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1296 { |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1297 retval = FALSE; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1298 } |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1299 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1300 SelectObject (hdc, old_font); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1301 ReleaseDC (NULL, hdc); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1302 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1303 return retval; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1304 } |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1305 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1306 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1307 static XCharStruct * |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1308 w32_per_char_metric (font, char2b, font_type) |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1309 XFontStruct *font; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1310 wchar_t *char2b; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1311 enum w32_char_font_type font_type; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1312 { |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1313 /* The result metric information. */ |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1314 XCharStruct *pcm; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1315 BOOL retval; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1316 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1317 xassert (font && char2b); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1318 xassert (font_type != UNKNOWN_FONT); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1319 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1320 /* Handle the common cases quickly. */ |
|
34112
adfe753a8c4e
(w32_bdf_per_char_metric): Dereference pointer correctly for single
Jason Rumney <jasonr@gnu.org>
parents:
34093
diff
changeset
|
1321 if (!font->bdf && font->per_char == NULL) |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1322 /* TODO: determine whether char2b exists in font? */ |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1323 return &font->max_bounds; |
|
34112
adfe753a8c4e
(w32_bdf_per_char_metric): Dereference pointer correctly for single
Jason Rumney <jasonr@gnu.org>
parents:
34093
diff
changeset
|
1324 else if (!font->bdf && *char2b < 128) |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1325 return &font->per_char[*char2b]; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1326 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1327 pcm = &font->scratch; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1328 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1329 if (font_type == BDF_1D_FONT) |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1330 retval = w32_bdf_per_char_metric (font, char2b, 1, pcm); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1331 else if (font_type == BDF_2D_FONT) |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1332 retval = w32_bdf_per_char_metric (font, char2b, 2, pcm); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1333 else |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1334 retval = w32_native_per_char_metric (font, char2b, font_type, pcm); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1335 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1336 if (retval) |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1337 return pcm; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1338 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1339 return NULL; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1340 } |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1341 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1342 void |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1343 w32_cache_char_metrics (font) |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1344 XFontStruct *font; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1345 { |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1346 wchar_t char2b = L'x'; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1347 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1348 /* Cache char metrics for the common cases. */ |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1349 if (font->bdf) |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1350 { |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1351 /* TODO: determine whether font is fixed-pitch. */ |
|
33037
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1352 if (!w32_bdf_per_char_metric (font, &char2b, 1, &font->max_bounds)) |
|
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1353 { |
|
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1354 /* Use the font width and height as max bounds, as not all BDF |
|
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1355 fonts contain the letter 'x'. */ |
|
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1356 font->max_bounds.width = FONT_MAX_WIDTH (font); |
|
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1357 font->max_bounds.lbearing = -font->bdf->llx; |
|
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1358 font->max_bounds.rbearing = FONT_MAX_WIDTH (font) - font->bdf->urx; |
|
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1359 font->max_bounds.ascent = FONT_BASE (font); |
|
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1360 font->max_bounds.descent = FONT_DESCENT (font); |
|
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1361 } |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1362 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1363 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1364 { |
|
32727
3ecb42f00b85
(w32_cache_char_metrics): Double check that font is
Jason Rumney <jasonr@gnu.org>
parents:
32720
diff
changeset
|
1365 if (((font->tm.tmPitchAndFamily & TMPF_FIXED_PITCH) != 0) |
|
3ecb42f00b85
(w32_cache_char_metrics): Double check that font is
Jason Rumney <jasonr@gnu.org>
parents:
32720
diff
changeset
|
1366 /* Some fonts (eg DBCS fonts) are marked as fixed width even |
|
3ecb42f00b85
(w32_cache_char_metrics): Double check that font is
Jason Rumney <jasonr@gnu.org>
parents:
32720
diff
changeset
|
1367 though they contain characters of different widths. */ |
|
3ecb42f00b85
(w32_cache_char_metrics): Double check that font is
Jason Rumney <jasonr@gnu.org>
parents:
32720
diff
changeset
|
1368 || (font->tm.tmMaxCharWidth != font->tm.tmAveCharWidth)) |
|
31624
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1369 { |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1370 /* Font is not fixed pitch, so cache per_char info for the |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1371 ASCII characters. It would be much more work, and probably |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1372 not worth it, to cache other chars, since we may change |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1373 between using Unicode and ANSI text drawing functions at |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1374 run-time. */ |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1375 int i; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1376 |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1377 font->per_char = xmalloc (128 * sizeof(XCharStruct)); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1378 for (i = 0; i < 128; i++) |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1379 { |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1380 char2b = i; |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1381 w32_native_per_char_metric (font, &char2b, ANSI_FONT, |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1382 &font->per_char[i]); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1383 } |
|
31624
417b6743c5fa
(w32_per_char_metric): Handle non-TrueType fonts.
Andrew Innes <andrewi@gnu.org>
parents:
31116
diff
changeset
|
1384 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1385 else |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1386 w32_native_per_char_metric (font, &char2b, ANSI_FONT, |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1387 &font->max_bounds); |
|
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
1388 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1389 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1390 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1391 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1392 /* Determine if a font is double byte. */ |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1393 int w32_font_is_double_byte (XFontStruct *font) |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1394 { |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1395 return font->double_byte_p; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1396 } |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1397 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1398 |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1399 static BOOL |
|
35287
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
1400 w32_use_unicode_for_codepage (codepage) |
|
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
1401 int codepage; |
|
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
1402 { |
|
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
1403 /* If the current codepage is supported, use Unicode for output. */ |
|
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
1404 return (w32_enable_unicode_output |
|
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
1405 && codepage != CP_8BIT |
|
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
1406 && (codepage == CP_UNICODE || IsValidCodePage (codepage))); |
|
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
1407 } |
|
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
1408 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1409 /* Encode CHAR2B using encoding information from FONT_INFO. CHAR2B is |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1410 the two-byte form of C. Encoding is returned in *CHAR2B. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1411 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1412 static INLINE enum w32_char_font_type |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1413 w32_encode_char (c, char2b, font_info, two_byte_p) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1414 int c; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1415 wchar_t *char2b; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1416 struct font_info *font_info; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1417 int * two_byte_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1418 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1419 int charset = CHAR_CHARSET (c); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1420 int codepage; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1421 int unicode_p = 0; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1422 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1423 XFontStruct *font = font_info->font; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1424 |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1425 xassert (two_byte_p); |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1426 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1427 *two_byte_p = w32_font_is_double_byte (font); |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1428 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1429 /* FONT_INFO may define a scheme by which to encode byte1 and byte2. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1430 This may be either a program in a special encoder language or a |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1431 fixed encoding. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1432 if (font_info->font_encoder) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1433 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1434 /* It's a program. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1435 struct ccl_program *ccl = font_info->font_encoder; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1436 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1437 if (CHARSET_DIMENSION (charset) == 1) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1438 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1439 ccl->reg[0] = charset; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1440 ccl->reg[1] = BYTE2 (*char2b); |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1441 ccl->reg[2] = -1; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1442 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1443 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1444 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1445 ccl->reg[0] = charset; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1446 ccl->reg[1] = BYTE1 (*char2b); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1447 ccl->reg[2] = BYTE2 (*char2b); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1448 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1449 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1450 ccl_driver (ccl, NULL, NULL, 0, 0, NULL); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1451 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1452 /* We assume that MSBs are appropriately set/reset by CCL |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1453 program. */ |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1454 if (!*two_byte_p) /* 1-byte font */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1455 *char2b = BUILD_WCHAR_T (0, ccl->reg[1]); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1456 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1457 *char2b = BUILD_WCHAR_T (ccl->reg[1], ccl->reg[2]); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1458 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1459 else if (font_info->encoding[charset]) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1460 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1461 /* Fixed encoding scheme. See fontset.h for the meaning of the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1462 encoding numbers. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1463 int enc = font_info->encoding[charset]; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1464 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1465 if ((enc == 1 || enc == 2) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1466 && CHARSET_DIMENSION (charset) == 2) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1467 *char2b = BUILD_WCHAR_T (BYTE1 (*char2b) | 0x80, BYTE2 (*char2b)); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1468 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1469 if (enc == 1 || enc == 3 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1470 || (enc == 4 && CHARSET_DIMENSION (charset) == 1)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1471 *char2b = BUILD_WCHAR_T (BYTE1 (*char2b), BYTE2 (*char2b) | 0x80); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1472 else if (enc == 4) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1473 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1474 int sjis1, sjis2; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1475 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1476 ENCODE_SJIS (BYTE1 (*char2b), BYTE2 (*char2b), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1477 sjis1, sjis2); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1478 *char2b = BUILD_WCHAR_T (sjis1, sjis2); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1479 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1480 } |
|
40010
1a8e549e2f40
(w32_encode_char): Get cached codepage from font_info,
Andrew Innes <andrewi@gnu.org>
parents:
40005
diff
changeset
|
1481 codepage = font_info->codepage; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1482 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1483 /* If charset is not ASCII or Latin-1, may need to move it into |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1484 Unicode space. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1485 if ( font && !font->bdf && w32_use_unicode_for_codepage (codepage) |
|
36002
205727d5d63c
(w32_encode_char): Treat eight bit graphic and control
Jason Rumney <jasonr@gnu.org>
parents:
35984
diff
changeset
|
1486 && charset != CHARSET_ASCII && charset != charset_latin_iso8859_1 |
|
205727d5d63c
(w32_encode_char): Treat eight bit graphic and control
Jason Rumney <jasonr@gnu.org>
parents:
35984
diff
changeset
|
1487 && charset != CHARSET_8_BIT_CONTROL && charset != CHARSET_8_BIT_GRAPHIC) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1488 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1489 char temp[3]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1490 temp[0] = BYTE1 (*char2b); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1491 temp[1] = BYTE2 (*char2b); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1492 temp[2] = '\0'; |
|
33386
e0f1d0f3a59d
(w32_encode_char): Handle CP_UNICODE specially.
Jason Rumney <jasonr@gnu.org>
parents:
33289
diff
changeset
|
1493 if (codepage != CP_UNICODE) |
|
e0f1d0f3a59d
(w32_encode_char): Handle CP_UNICODE specially.
Jason Rumney <jasonr@gnu.org>
parents:
33289
diff
changeset
|
1494 { |
|
e0f1d0f3a59d
(w32_encode_char): Handle CP_UNICODE specially.
Jason Rumney <jasonr@gnu.org>
parents:
33289
diff
changeset
|
1495 if (temp[0]) |
|
e0f1d0f3a59d
(w32_encode_char): Handle CP_UNICODE specially.
Jason Rumney <jasonr@gnu.org>
parents:
33289
diff
changeset
|
1496 MultiByteToWideChar (codepage, 0, temp, 2, char2b, 1); |
|
e0f1d0f3a59d
(w32_encode_char): Handle CP_UNICODE specially.
Jason Rumney <jasonr@gnu.org>
parents:
33289
diff
changeset
|
1497 else |
|
e0f1d0f3a59d
(w32_encode_char): Handle CP_UNICODE specially.
Jason Rumney <jasonr@gnu.org>
parents:
33289
diff
changeset
|
1498 MultiByteToWideChar (codepage, 0, temp+1, 1, char2b, 1); |
|
e0f1d0f3a59d
(w32_encode_char): Handle CP_UNICODE specially.
Jason Rumney <jasonr@gnu.org>
parents:
33289
diff
changeset
|
1499 } |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1500 unicode_p = 1; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1501 *two_byte_p = 1; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1502 } |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1503 if (!font) |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1504 return UNKNOWN_FONT; |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1505 else if (font->bdf && CHARSET_DIMENSION (charset) == 1) |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1506 return BDF_1D_FONT; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1507 else if (font->bdf) |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
1508 return BDF_2D_FONT; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1509 else if (unicode_p) |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1510 return UNICODE_FONT; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1511 else |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1512 return ANSI_FONT; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1513 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1514 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1515 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1516 /* Get face and two-byte form of character C in face FACE_ID on frame |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1517 F. The encoding of C is returned in *CHAR2B. MULTIBYTE_P non-zero |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1518 means we want to display multibyte text. Value is a pointer to a |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1519 realized face that is ready for display. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1520 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1521 static INLINE struct face * |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1522 x_get_char_face_and_encoding (f, c, face_id, char2b, multibyte_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1523 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1524 int c, face_id; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1525 wchar_t *char2b; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1526 int multibyte_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1527 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1528 struct face *face = FACE_FROM_ID (f, face_id); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1529 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1530 if (!multibyte_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1531 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1532 /* Unibyte case. We don't have to encode, but we have to make |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1533 sure to use a face suitable for unibyte. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1534 *char2b = BUILD_WCHAR_T (0, c); |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
1535 face_id = FACE_FOR_CHAR (f, face, c); |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
1536 face = FACE_FROM_ID (f, face_id); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1537 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1538 else if (c < 128 && face_id < BASIC_FACE_ID_SENTINEL) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1539 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1540 /* Case of ASCII in a face known to fit ASCII. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1541 *char2b = BUILD_WCHAR_T (0, c); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1542 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1543 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1544 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1545 int c1, c2, charset; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1546 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1547 /* Split characters into bytes. If c2 is -1 afterwards, C is |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1548 really a one-byte character so that byte1 is zero. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1549 SPLIT_CHAR (c, charset, c1, c2); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1550 if (c2 > 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1551 *char2b = BUILD_WCHAR_T (c1, c2); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1552 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1553 *char2b = BUILD_WCHAR_T (0, c1); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1554 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1555 /* Maybe encode the character in *CHAR2B. */ |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
1556 if (face->font != NULL) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1557 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1558 struct font_info *font_info |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1559 = FONT_INFO_FROM_ID (f, face->font_info_id); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1560 if (font_info) |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1561 w32_encode_char (c, char2b, font_info, &multibyte_p); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1562 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1563 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1564 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1565 /* Make sure X resources of the face are allocated. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1566 xassert (face != NULL); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1567 PREPARE_FACE_FOR_DISPLAY (f, face); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1568 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1569 return face; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1570 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1571 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1572 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1573 /* Get face and two-byte form of character glyph GLYPH on frame F. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1574 The encoding of GLYPH->u.ch is returned in *CHAR2B. Value is |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1575 a pointer to a realized face that is ready for display. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1576 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1577 static INLINE struct face * |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
1578 x_get_glyph_face_and_encoding (f, glyph, char2b, two_byte_p) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1579 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1580 struct glyph *glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1581 wchar_t *char2b; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
1582 int *two_byte_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1583 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1584 struct face *face; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1585 int dummy = 0; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1586 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1587 xassert (glyph->type == CHAR_GLYPH); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1588 face = FACE_FROM_ID (f, glyph->face_id); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1589 |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
1590 if (two_byte_p) |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
1591 *two_byte_p = 0; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1592 else |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1593 two_byte_p = &dummy; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
1594 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1595 if (!glyph->multibyte_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1596 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1597 /* Unibyte case. We don't have to encode, but we have to make |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1598 sure to use a face suitable for unibyte. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1599 *char2b = BUILD_WCHAR_T (0, glyph->u.ch); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1600 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1601 else if (glyph->u.ch < 128 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1602 && glyph->face_id < BASIC_FACE_ID_SENTINEL) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1603 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1604 /* Case of ASCII in a face known to fit ASCII. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1605 *char2b = BUILD_WCHAR_T (0, glyph->u.ch); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1606 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1607 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1608 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1609 int c1, c2, charset; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1610 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1611 /* Split characters into bytes. If c2 is -1 afterwards, C is |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1612 really a one-byte character so that byte1 is zero. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1613 SPLIT_CHAR (glyph->u.ch, charset, c1, c2); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1614 if (c2 > 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1615 *char2b = BUILD_WCHAR_T (c1, c2); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1616 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1617 *char2b = BUILD_WCHAR_T (0, c1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1618 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1619 /* Maybe encode the character in *CHAR2B. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1620 if (charset != CHARSET_ASCII) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1621 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1622 struct font_info *font_info |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1623 = FONT_INFO_FROM_ID (f, face->font_info_id); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1624 if (font_info) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1625 { |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1626 glyph->w32_font_type |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1627 = w32_encode_char (glyph->u.ch, char2b, font_info, two_byte_p); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1628 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1629 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1630 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1631 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1632 /* Make sure X resources of the face are allocated. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1633 xassert (face != NULL); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1634 PREPARE_FACE_FOR_DISPLAY (f, face); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1635 return face; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1636 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1637 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1638 |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1639 /* Store one glyph for IT->char_to_display in IT->glyph_row. |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1640 Called from x_produce_glyphs when IT->glyph_row is non-null. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1641 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1642 static INLINE void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1643 x_append_glyph (it) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1644 struct it *it; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1645 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1646 struct glyph *glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1647 enum glyph_row_area area = it->area; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1648 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1649 xassert (it->glyph_row); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1650 xassert (it->char_to_display != '\n' && it->char_to_display != '\t'); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1651 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1652 glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1653 if (glyph < it->glyph_row->glyphs[area + 1]) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1654 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1655 glyph->charpos = CHARPOS (it->position); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1656 glyph->object = it->object; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1657 glyph->pixel_width = it->pixel_width; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1658 glyph->voffset = it->voffset; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1659 glyph->type = CHAR_GLYPH; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1660 glyph->multibyte_p = it->multibyte_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1661 glyph->left_box_line_p = it->start_of_box_run_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1662 glyph->right_box_line_p = it->end_of_box_run_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1663 glyph->overlaps_vertically_p = (it->phys_ascent > it->ascent |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1664 || it->phys_descent > it->descent); |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1665 glyph->padding_p = 0; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
1666 glyph->glyph_not_available_p = it->glyph_not_available_p; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1667 glyph->face_id = it->face_id; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1668 glyph->u.ch = it->char_to_display; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1669 glyph->w32_font_type = UNKNOWN_FONT; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1670 ++it->glyph_row->used[area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1671 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1672 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1673 |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1674 /* Store one glyph for the composition IT->cmp_id in IT->glyph_row. |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1675 Called from x_produce_glyphs when IT->glyph_row is non-null. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1676 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1677 static INLINE void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1678 x_append_composite_glyph (it) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1679 struct it *it; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1680 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1681 struct glyph *glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1682 enum glyph_row_area area = it->area; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1683 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1684 xassert (it->glyph_row); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1685 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1686 glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1687 if (glyph < it->glyph_row->glyphs[area + 1]) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1688 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1689 glyph->charpos = CHARPOS (it->position); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1690 glyph->object = it->object; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1691 glyph->pixel_width = it->pixel_width; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1692 glyph->voffset = it->voffset; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1693 glyph->type = COMPOSITE_GLYPH; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1694 glyph->multibyte_p = it->multibyte_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1695 glyph->left_box_line_p = it->start_of_box_run_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1696 glyph->right_box_line_p = it->end_of_box_run_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1697 glyph->overlaps_vertically_p = (it->phys_ascent > it->ascent |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1698 || it->phys_descent > it->descent); |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1699 glyph->padding_p = 0; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1700 glyph->glyph_not_available_p = 0; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1701 glyph->face_id = it->face_id; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1702 glyph->u.cmp_id = it->cmp_id; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1703 glyph->w32_font_type = UNKNOWN_FONT; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1704 ++it->glyph_row->used[area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1705 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1706 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1707 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1708 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1709 /* Change IT->ascent and IT->height according to the setting of |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1710 IT->voffset. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1711 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1712 static INLINE void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1713 take_vertical_position_into_account (it) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1714 struct it *it; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1715 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1716 if (it->voffset) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1717 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1718 if (it->voffset < 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1719 /* Increase the ascent so that we can display the text higher |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1720 in the line. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1721 it->ascent += abs (it->voffset); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1722 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1723 /* Increase the descent so that we can display the text lower |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1724 in the line. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1725 it->descent += it->voffset; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1726 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1727 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1728 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1729 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1730 /* Produce glyphs/get display metrics for the image IT is loaded with. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1731 See the description of struct display_iterator in dispextern.h for |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1732 an overview of struct display_iterator. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1733 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1734 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1735 x_produce_image_glyph (it) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1736 struct it *it; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1737 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1738 struct image *img; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1739 struct face *face; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1740 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1741 xassert (it->what == IT_IMAGE); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1742 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1743 face = FACE_FROM_ID (it->f, it->face_id); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1744 img = IMAGE_FROM_ID (it->f, it->image_id); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1745 xassert (img); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1746 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1747 /* Make sure X resources of the face and image are loaded. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1748 PREPARE_FACE_FOR_DISPLAY (it->f, face); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1749 prepare_image_for_display (it->f, img); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1750 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
1751 it->ascent = it->phys_ascent = image_ascent (img, face); |
|
35287
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
1752 it->descent = it->phys_descent = img->height + 2 * img->vmargin - it->ascent; |
|
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
1753 it->pixel_width = img->width + 2 * img->hmargin; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1754 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1755 it->nglyphs = 1; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1756 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1757 if (face->box != FACE_NO_BOX) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1758 { |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1759 if (face->box_line_width > 0) |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1760 { |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1761 it->ascent += face->box_line_width; |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1762 it->descent += face->box_line_width; |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1763 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1764 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1765 if (it->start_of_box_run_p) |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1766 it->pixel_width += abs (face->box_line_width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1767 if (it->end_of_box_run_p) |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1768 it->pixel_width += abs (face->box_line_width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1769 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1770 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1771 take_vertical_position_into_account (it); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1772 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1773 if (it->glyph_row) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1774 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1775 struct glyph *glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1776 enum glyph_row_area area = it->area; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1777 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1778 glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1779 if (glyph < it->glyph_row->glyphs[area + 1]) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1780 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1781 glyph->charpos = CHARPOS (it->position); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1782 glyph->object = it->object; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1783 glyph->pixel_width = it->pixel_width; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1784 glyph->voffset = it->voffset; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1785 glyph->type = IMAGE_GLYPH; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1786 glyph->multibyte_p = it->multibyte_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1787 glyph->left_box_line_p = it->start_of_box_run_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1788 glyph->right_box_line_p = it->end_of_box_run_p; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1789 glyph->overlaps_vertically_p = 0; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1790 glyph->padding_p = 0; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1791 glyph->glyph_not_available_p = 0; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1792 glyph->face_id = it->face_id; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1793 glyph->u.img_id = img->id; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1794 glyph->w32_font_type = UNKNOWN_FONT; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1795 ++it->glyph_row->used[area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1796 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1797 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1798 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1799 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1800 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1801 /* Append a stretch glyph to IT->glyph_row. OBJECT is the source |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1802 of the glyph, WIDTH and HEIGHT are the width and height of the |
|
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1803 stretch. ASCENT is the percentage/100 of HEIGHT to use for the |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1804 ascent of the glyph (0 <= ASCENT <= 1). */ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1805 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1806 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1807 x_append_stretch_glyph (it, object, width, height, ascent) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1808 struct it *it; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1809 Lisp_Object object; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1810 int width, height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1811 double ascent; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1812 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1813 struct glyph *glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1814 enum glyph_row_area area = it->area; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1815 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1816 xassert (ascent >= 0 && ascent <= 1); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1817 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1818 glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1819 if (glyph < it->glyph_row->glyphs[area + 1]) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1820 { |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1821 glyph->charpos = CHARPOS (it->position); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1822 glyph->object = object; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1823 glyph->pixel_width = width; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1824 glyph->voffset = it->voffset; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1825 glyph->type = STRETCH_GLYPH; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1826 glyph->multibyte_p = it->multibyte_p; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1827 glyph->left_box_line_p = it->start_of_box_run_p; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1828 glyph->right_box_line_p = it->end_of_box_run_p; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1829 glyph->overlaps_vertically_p = 0; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1830 glyph->padding_p = 0; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1831 glyph->glyph_not_available_p = 0; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1832 glyph->face_id = it->face_id; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1833 glyph->u.stretch.ascent = height * ascent; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1834 glyph->u.stretch.height = height; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
1835 glyph->w32_font_type = UNKNOWN_FONT; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1836 ++it->glyph_row->used[area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1837 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1838 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1839 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1840 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1841 /* Produce a stretch glyph for iterator IT. IT->object is the value |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1842 of the glyph property displayed. The value must be a list |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1843 `(space KEYWORD VALUE ...)' with the following KEYWORD/VALUE pairs |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1844 being recognized: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1845 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1846 1. `:width WIDTH' specifies that the space should be WIDTH * |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1847 canonical char width wide. WIDTH may be an integer or floating |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1848 point number. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1849 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1850 2. `:relative-width FACTOR' specifies that the width of the stretch |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1851 should be computed from the width of the first character having the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1852 `glyph' property, and should be FACTOR times that width. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1853 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1854 3. `:align-to HPOS' specifies that the space should be wide enough |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1855 to reach HPOS, a value in canonical character units. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1856 |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1857 Exactly one of the above pairs must be present. |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1858 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1859 4. `:height HEIGHT' specifies that the height of the stretch produced |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1860 should be HEIGHT, measured in canonical character units. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1861 |
| 42675 | 1862 5. `:relative-height FACTOR' specifies that the height of the |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1863 stretch should be FACTOR times the height of the characters having |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1864 the glyph property. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1865 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1866 Either none or exactly one of 4 or 5 must be present. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1867 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1868 6. `:ascent ASCENT' specifies that ASCENT percent of the height |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1869 of the stretch should be used for the ascent of the stretch. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1870 ASCENT must be in the range 0 <= ASCENT <= 100. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1871 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1872 #define NUMVAL(X) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1873 ((INTEGERP (X) || FLOATP (X)) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1874 ? XFLOATINT (X) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1875 : - 1) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1876 |
| 13434 | 1877 |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
1878 static void |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1879 x_produce_stretch_glyph (it) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1880 struct it *it; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1881 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1882 /* (space :width WIDTH :height HEIGHT. */ |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
1883 #if GLYPH_DEBUG |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
1884 extern Lisp_Object Qspace; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
1885 #endif |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
1886 extern Lisp_Object QCwidth, QCheight, QCascent; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1887 extern Lisp_Object QCrelative_width, QCrelative_height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1888 extern Lisp_Object QCalign_to; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1889 Lisp_Object prop, plist; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1890 double width = 0, height = 0, ascent = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1891 struct face *face = FACE_FROM_ID (it->f, it->face_id); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1892 XFontStruct *font = face->font ? face->font : FRAME_FONT (it->f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1893 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1894 PREPARE_FACE_FOR_DISPLAY (it->f, face); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1895 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1896 /* List should start with `space'. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1897 xassert (CONSP (it->object) && EQ (XCAR (it->object), Qspace)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1898 plist = XCDR (it->object); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1899 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1900 /* Compute the width of the stretch. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1901 if (prop = Fplist_get (plist, QCwidth), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1902 NUMVAL (prop) > 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1903 /* Absolute width `:width WIDTH' specified and valid. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1904 width = NUMVAL (prop) * CANON_X_UNIT (it->f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1905 else if (prop = Fplist_get (plist, QCrelative_width), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1906 NUMVAL (prop) > 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1907 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1908 /* Relative width `:relative-width FACTOR' specified and valid. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1909 Compute the width of the characters having the `glyph' |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1910 property. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1911 struct it it2; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1912 unsigned char *p = BYTE_POS_ADDR (IT_BYTEPOS (*it)); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1913 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1914 it2 = *it; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1915 if (it->multibyte_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1916 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1917 int maxlen = ((IT_BYTEPOS (*it) >= GPT ? ZV : GPT) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1918 - IT_BYTEPOS (*it)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1919 it2.c = STRING_CHAR_AND_LENGTH (p, maxlen, it2.len); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1920 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1921 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1922 it2.c = *p, it2.len = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1923 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1924 it2.glyph_row = NULL; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1925 it2.what = IT_CHARACTER; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1926 x_produce_glyphs (&it2); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1927 width = NUMVAL (prop) * it2.pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1928 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1929 else if (prop = Fplist_get (plist, QCalign_to), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1930 NUMVAL (prop) > 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1931 width = NUMVAL (prop) * CANON_X_UNIT (it->f) - it->current_x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1932 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1933 /* Nothing specified -> width defaults to canonical char width. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1934 width = CANON_X_UNIT (it->f); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1935 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1936 /* Compute height. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1937 if (prop = Fplist_get (plist, QCheight), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1938 NUMVAL (prop) > 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1939 height = NUMVAL (prop) * CANON_Y_UNIT (it->f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1940 else if (prop = Fplist_get (plist, QCrelative_height), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1941 NUMVAL (prop) > 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1942 height = FONT_HEIGHT (font) * NUMVAL (prop); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1943 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1944 height = FONT_HEIGHT (font); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1945 |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1946 /* Compute percentage of height used for ascent. If |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1947 `:ascent ASCENT' is present and valid, use that. Otherwise, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1948 derive the ascent from the font in use. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1949 if (prop = Fplist_get (plist, QCascent), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1950 NUMVAL (prop) > 0 && NUMVAL (prop) <= 100) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1951 ascent = NUMVAL (prop) / 100.0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1952 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1953 ascent = (double) FONT_BASE (font) / FONT_HEIGHT (font); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1954 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1955 if (width <= 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1956 width = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1957 if (height <= 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1958 height = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1959 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1960 if (it->glyph_row) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1961 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1962 Lisp_Object object = it->stack[it->sp - 1].string; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1963 if (!STRINGP (object)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1964 object = it->w->buffer; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1965 x_append_stretch_glyph (it, object, width, height, ascent); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1966 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1967 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1968 it->pixel_width = width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1969 it->ascent = it->phys_ascent = height * ascent; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1970 it->descent = it->phys_descent = height - it->ascent; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1971 it->nglyphs = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1972 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1973 if (face->box != FACE_NO_BOX) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1974 { |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1975 if (face->box_line_width > 0) |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1976 { |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1977 it->ascent += face->box_line_width; |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1978 it->descent += face->box_line_width; |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1979 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1980 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1981 if (it->start_of_box_run_p) |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1982 it->pixel_width += abs (face->box_line_width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1983 if (it->end_of_box_run_p) |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
1984 it->pixel_width += abs (face->box_line_width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1985 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
1986 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1987 take_vertical_position_into_account (it); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1988 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1989 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1990 /* Return proper value to be used as baseline offset of font that has |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1991 ASCENT and DESCENT to draw characters by the font at the vertical |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1992 center of the line of frame F. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1993 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1994 Here, out task is to find the value of BOFF in the following figure; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1995 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1996 -------------------------+-----------+- |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1997 -+-+---------+-+ | | |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1998 | | | | | | |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
1999 | | | | F_ASCENT F_HEIGHT |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2000 | | | ASCENT | | |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2001 HEIGHT | | | | | |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2002 | | |-|-+------+-----------|------- baseline |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2003 | | | | BOFF | | |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2004 | |---------|-+-+ | | |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2005 | | | DESCENT | | |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2006 -+-+---------+-+ F_DESCENT | |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2007 -------------------------+-----------+- |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2008 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2009 -BOFF + DESCENT + (F_HEIGHT - HEIGHT) / 2 = F_DESCENT |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2010 BOFF = DESCENT + (F_HEIGHT - HEIGHT) / 2 - F_DESCENT |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2011 DESCENT = FONT->descent |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2012 HEIGHT = FONT_HEIGHT (FONT) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2013 F_DESCENT = (F->output_data.x->font->descent |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2014 - F->output_data.x->baseline_offset) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2015 F_HEIGHT = FRAME_LINE_HEIGHT (F) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2016 */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2017 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2018 #define VCENTER_BASELINE_OFFSET(FONT, F) \ |
|
33289
834a6b4f08a4
(VCENTER_BASELINE_OFFSET): Fix previous change. If the
Kenichi Handa <handa@m17n.org>
parents:
33218
diff
changeset
|
2019 (FONT_DESCENT (FONT) \ |
|
834a6b4f08a4
(VCENTER_BASELINE_OFFSET): Fix previous change. If the
Kenichi Handa <handa@m17n.org>
parents:
33218
diff
changeset
|
2020 + (FRAME_LINE_HEIGHT ((F)) - FONT_HEIGHT ((FONT)) \ |
|
834a6b4f08a4
(VCENTER_BASELINE_OFFSET): Fix previous change. If the
Kenichi Handa <handa@m17n.org>
parents:
33218
diff
changeset
|
2021 + (FRAME_LINE_HEIGHT ((F)) > FONT_HEIGHT ((FONT)))) / 2 \ |
|
834a6b4f08a4
(VCENTER_BASELINE_OFFSET): Fix previous change. If the
Kenichi Handa <handa@m17n.org>
parents:
33218
diff
changeset
|
2022 - (FONT_DESCENT (FRAME_FONT (F)) - FRAME_BASELINE_OFFSET (F))) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2023 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2024 /* Produce glyphs/get display metrics for the display element IT is |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2025 loaded with. See the description of struct display_iterator in |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2026 dispextern.h for an overview of struct display_iterator. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2027 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2028 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2029 x_produce_glyphs (it) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2030 struct it *it; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2031 { |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2032 it->glyph_not_available_p = 0; |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2033 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2034 if (it->what == IT_CHARACTER) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2035 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2036 wchar_t char2b; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2037 XFontStruct *font; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2038 struct face *face = FACE_FROM_ID (it->f, it->face_id); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2039 XCharStruct *pcm; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2040 int font_not_found_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2041 struct font_info *font_info; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2042 int boff; /* baseline offset */ |
|
32670
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2043 /* We may change it->multibyte_p upon unibyte<->multibyte |
|
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2044 conversion. So, save the current value now and restore it |
|
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2045 later. |
|
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2046 |
|
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2047 Note: It seems that we don't have to record multibyte_p in |
|
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2048 struct glyph because the character code itself tells if or |
|
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2049 not the character is multibyte. Thus, in the future, we must |
|
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2050 consider eliminating the field `multibyte_p' in the struct |
|
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2051 glyph. |
|
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2052 */ |
|
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2053 int saved_multibyte_p = it->multibyte_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2054 |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2055 /* Maybe translate single-byte characters to multibyte, or the |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2056 other way. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2057 it->char_to_display = it->c; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2058 if (!ASCII_BYTE_P (it->c)) |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2059 { |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2060 if (unibyte_display_via_language_environment |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2061 && SINGLE_BYTE_CHAR_P (it->c) |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2062 && (it->c >= 0240 |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2063 || !NILP (Vnonascii_translation_table))) |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2064 { |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2065 it->char_to_display = unibyte_char_to_multibyte (it->c); |
|
32670
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2066 it->multibyte_p = 1; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2067 it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display); |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2068 face = FACE_FROM_ID (it->f, it->face_id); |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2069 } |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2070 else if (!SINGLE_BYTE_CHAR_P (it->c) |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2071 && !it->multibyte_p) |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2072 { |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
2073 it->multibyte_p = 1; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2074 it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display); |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2075 face = FACE_FROM_ID (it->f, it->face_id); |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2076 } |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2077 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2078 |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2079 /* Get font to use. Encode IT->char_to_display. */ |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2080 x_get_char_face_and_encoding (it->f, it->char_to_display, |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2081 it->face_id, &char2b, |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2082 it->multibyte_p); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2083 font = face->font; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2084 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2085 /* When no suitable font found, use the default font. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2086 font_not_found_p = font == NULL; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2087 if (font_not_found_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2088 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2089 font = FRAME_FONT (it->f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2090 boff = it->f->output_data.w32->baseline_offset; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2091 font_info = NULL; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2092 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2093 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2094 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2095 font_info = FONT_INFO_FROM_ID (it->f, face->font_info_id); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2096 boff = font_info->baseline_offset; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2097 if (font_info->vertical_centering) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2098 boff = VCENTER_BASELINE_OFFSET (font, it->f) - boff; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2099 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2100 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2101 if (it->char_to_display >= ' ' |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2102 && (!it->multibyte_p || it->char_to_display < 128)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2103 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2104 /* Either unibyte or ASCII. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2105 int stretched_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2106 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2107 it->nglyphs = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2108 |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
2109 pcm = w32_per_char_metric (font, &char2b, |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2110 font->bdf ? BDF_1D_FONT : ANSI_FONT); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2111 it->ascent = FONT_BASE (font) + boff; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2112 it->descent = FONT_DESCENT (font) - boff; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2113 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2114 if (pcm) |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2115 { |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2116 it->phys_ascent = pcm->ascent + boff; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2117 it->phys_descent = pcm->descent - boff; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2118 it->pixel_width = pcm->width; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2119 } |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2120 else |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2121 { |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2122 it->glyph_not_available_p = 1; |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2123 it->phys_ascent = FONT_BASE (font) + boff; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2124 it->phys_descent = FONT_DESCENT (font) - boff; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2125 it->pixel_width = FONT_WIDTH (font); |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2126 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2127 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2128 /* If this is a space inside a region of text with |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2129 `space-width' property, change its width. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2130 stretched_p = it->char_to_display == ' ' && !NILP (it->space_width); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2131 if (stretched_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2132 it->pixel_width *= XFLOATINT (it->space_width); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2133 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2134 /* If face has a box, add the box thickness to the character |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2135 height. If character has a box line to the left and/or |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2136 right, add the box line width to the character's width. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2137 if (face->box != FACE_NO_BOX) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2138 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2139 int thick = face->box_line_width; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2140 |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2141 if (thick > 0) |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2142 { |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2143 it->ascent += thick; |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2144 it->descent += thick; |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2145 } |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2146 else |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2147 thick = -thick; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2148 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2149 if (it->start_of_box_run_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2150 it->pixel_width += thick; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2151 if (it->end_of_box_run_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2152 it->pixel_width += thick; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2153 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2154 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2155 /* If face has an overline, add the height of the overline |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2156 (1 pixel) and a 1 pixel margin to the character height. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2157 if (face->overline_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2158 it->ascent += 2; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2159 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2160 take_vertical_position_into_account (it); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2161 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2162 /* If we have to actually produce glyphs, do it. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2163 if (it->glyph_row) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2164 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2165 if (stretched_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2166 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2167 /* Translate a space with a `space-width' property |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2168 into a stretch glyph. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2169 double ascent = (double) FONT_BASE (font) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2170 / FONT_HEIGHT (font); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2171 x_append_stretch_glyph (it, it->object, it->pixel_width, |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2172 it->ascent + it->descent, ascent); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2173 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2174 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2175 x_append_glyph (it); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2176 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2177 /* If characters with lbearing or rbearing are displayed |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2178 in this line, record that fact in a flag of the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2179 glyph row. This is used to optimize X output code. */ |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2180 if (pcm && (pcm->lbearing < 0 || pcm->rbearing > pcm->width)) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2181 it->glyph_row->contains_overlapping_glyphs_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2182 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2183 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2184 else if (it->char_to_display == '\n') |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2185 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2186 /* A newline has no width but we need the height of the line. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2187 it->pixel_width = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2188 it->nglyphs = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2189 it->ascent = it->phys_ascent = FONT_BASE (font) + boff; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2190 it->descent = it->phys_descent = FONT_DESCENT (font) - boff; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2191 |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2192 if (face->box != FACE_NO_BOX |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2193 && face->box_line_width > 0) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2194 { |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2195 it->ascent += face->box_line_width; |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2196 it->descent += face->box_line_width; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2197 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2198 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2199 else if (it->char_to_display == '\t') |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2200 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2201 int tab_width = it->tab_width * CANON_X_UNIT (it->f); |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2202 int x = it->current_x + it->continuation_lines_width; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2203 int next_tab_x = ((1 + x + tab_width - 1) / tab_width) * tab_width; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2204 |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2205 /* If the distance from the current position to the next tab |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2206 stop is less than a canonical character width, use the |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2207 tab stop after that. */ |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2208 if (next_tab_x - x < CANON_X_UNIT (it->f)) |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2209 next_tab_x += tab_width; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2210 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2211 it->pixel_width = next_tab_x - x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2212 it->nglyphs = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2213 it->ascent = it->phys_ascent = FONT_BASE (font) + boff; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2214 it->descent = it->phys_descent = FONT_DESCENT (font) - boff; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2215 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2216 if (it->glyph_row) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2217 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2218 double ascent = (double) it->ascent / (it->ascent + it->descent); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2219 x_append_stretch_glyph (it, it->object, it->pixel_width, |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2220 it->ascent + it->descent, ascent); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2221 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2222 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2223 else |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2224 { |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
2225 /* A multi-byte character. |
|
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
2226 If we found a font, this font should give us the right |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2227 metrics. If we didn't find a font, use the frame's |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2228 default font and calculate the width of the character |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2229 from the charset width; this is what old redisplay code |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2230 did. */ |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2231 enum w32_char_font_type type; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2232 |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2233 if (font->bdf && CHARSET_DIMENSION (CHAR_CHARSET (it->c)) == 1) |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2234 type = BDF_1D_FONT; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2235 else if (font->bdf) |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2236 type = BDF_2D_FONT; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2237 else |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2238 type = UNICODE_FONT; |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
2239 |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
2240 pcm = w32_per_char_metric (font, &char2b, type); |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2241 |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2242 if (font_not_found_p || !pcm) |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2243 { |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2244 int charset = CHAR_CHARSET (it->char_to_display); |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2245 |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2246 it->glyph_not_available_p = 1; |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2247 it->pixel_width = (FONT_WIDTH (FRAME_FONT (it->f)) |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2248 * CHARSET_WIDTH (charset)); |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2249 it->phys_ascent = FONT_BASE (font) + boff; |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2250 it->phys_descent = FONT_DESCENT (font) - boff; |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2251 } |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2252 else |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2253 { |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2254 it->pixel_width = pcm->width; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2255 it->phys_ascent = pcm->ascent + boff; |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2256 it->phys_descent = pcm->descent - boff; |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2257 if (it->glyph_row |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2258 && (pcm->lbearing < 0 |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2259 || pcm->rbearing > pcm->width)) |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2260 it->glyph_row->contains_overlapping_glyphs_p = 1; |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
2261 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2262 it->nglyphs = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2263 it->ascent = FONT_BASE (font) + boff; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2264 it->descent = FONT_DESCENT (font) - boff; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2265 if (face->box != FACE_NO_BOX) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2266 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2267 int thick = face->box_line_width; |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2268 |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2269 if (thick > 0) |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2270 { |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2271 it->ascent += thick; |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2272 it->descent += thick; |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2273 } |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2274 else |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2275 thick = - thick; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2276 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2277 if (it->start_of_box_run_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2278 it->pixel_width += thick; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2279 if (it->end_of_box_run_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2280 it->pixel_width += thick; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2281 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2282 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2283 /* If face has an overline, add the height of the overline |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2284 (1 pixel) and a 1 pixel margin to the character height. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2285 if (face->overline_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2286 it->ascent += 2; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2287 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2288 take_vertical_position_into_account (it); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2289 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2290 if (it->glyph_row) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2291 x_append_glyph (it); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2292 } |
|
32670
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
2293 it->multibyte_p = saved_multibyte_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2294 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2295 else if (it->what == IT_COMPOSITION) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2296 { |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2297 /* Note: A composition is represented as one glyph in the |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2298 glyph matrix. There are no padding glyphs. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2299 wchar_t char2b; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2300 XFontStruct *font; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2301 struct face *face = FACE_FROM_ID (it->f, it->face_id); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2302 XCharStruct *pcm; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2303 int font_not_found_p; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2304 struct font_info *font_info; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2305 int boff; /* baseline offset */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2306 struct composition *cmp = composition_table[it->cmp_id]; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2307 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2308 /* Maybe translate single-byte characters to multibyte. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2309 it->char_to_display = it->c; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2310 if (unibyte_display_via_language_environment |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2311 && SINGLE_BYTE_CHAR_P (it->c) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2312 && (it->c >= 0240 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2313 || (it->c >= 0200 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2314 && !NILP (Vnonascii_translation_table)))) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2315 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2316 it->char_to_display = unibyte_char_to_multibyte (it->c); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2317 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2318 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2319 /* Get face and font to use. Encode IT->char_to_display. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2320 it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2321 face = FACE_FROM_ID (it->f, it->face_id); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2322 x_get_char_face_and_encoding (it->f, it->char_to_display, |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2323 it->face_id, &char2b, it->multibyte_p); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2324 font = face->font; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2325 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2326 /* When no suitable font found, use the default font. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2327 font_not_found_p = font == NULL; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2328 if (font_not_found_p) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2329 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2330 font = FRAME_FONT (it->f); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2331 boff = it->f->output_data.w32->baseline_offset; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2332 font_info = NULL; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2333 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2334 else |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2335 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2336 font_info = FONT_INFO_FROM_ID (it->f, face->font_info_id); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2337 boff = font_info->baseline_offset; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2338 if (font_info->vertical_centering) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2339 boff = VCENTER_BASELINE_OFFSET (font, it->f) - boff; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2340 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2341 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2342 /* There are no padding glyphs, so there is only one glyph to |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2343 produce for the composition. Important is that pixel_width, |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2344 ascent and descent are the values of what is drawn by |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2345 draw_glyphs (i.e. the values of the overall glyphs composed). */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2346 it->nglyphs = 1; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2347 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2348 /* If we have not yet calculated pixel size data of glyphs of |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2349 the composition for the current face font, calculate them |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2350 now. Theoretically, we have to check all fonts for the |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2351 glyphs, but that requires much time and memory space. So, |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2352 here we check only the font of the first glyph. This leads |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2353 to incorrect display very rarely, and C-l (recenter) can |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2354 correct the display anyway. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2355 if (cmp->font != (void *) font) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2356 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2357 /* Ascent and descent of the font of the first character of |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2358 this composition (adjusted by baseline offset). Ascent |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2359 and descent of overall glyphs should not be less than |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2360 them respectively. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2361 int font_ascent = FONT_BASE (font) + boff; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2362 int font_descent = FONT_DESCENT (font) - boff; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2363 /* Bounding box of the overall glyphs. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2364 int leftmost, rightmost, lowest, highest; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2365 int i, width, ascent, descent; |
|
33218
1d2f8848f63e
(x_produce_glyphs): Fix typo in enum name.
Andrew Innes <andrewi@gnu.org>
parents:
33097
diff
changeset
|
2366 enum w32_char_font_type font_type; |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2367 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2368 cmp->font = (void *) font; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2369 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2370 if (font->bdf && CHARSET_DIMENSION (CHAR_CHARSET (it->c)) == 1) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2371 font_type = BDF_1D_FONT; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2372 else if (font->bdf) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2373 font_type = BDF_2D_FONT; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2374 else |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2375 font_type = UNICODE_FONT; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2376 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2377 /* Initialize the bounding box. */ |
|
34222
7e09cff3b2ab
(x_produce_glyphs): If a font for a component of
Jason Rumney <jasonr@gnu.org>
parents:
34135
diff
changeset
|
2378 if (font_info |
|
7e09cff3b2ab
(x_produce_glyphs): If a font for a component of
Jason Rumney <jasonr@gnu.org>
parents:
34135
diff
changeset
|
2379 && (pcm = w32_per_char_metric (font, &char2b, font_type))) |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2380 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2381 width = pcm->width; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2382 ascent = pcm->ascent; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2383 descent = pcm->descent; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2384 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2385 else |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2386 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2387 width = FONT_WIDTH (font); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2388 ascent = FONT_BASE (font); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2389 descent = FONT_DESCENT (font); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2390 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2391 |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2392 rightmost = width; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2393 lowest = - descent + boff; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2394 highest = ascent + boff; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2395 leftmost = 0; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2396 |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2397 if (font_info |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2398 && font_info->default_ascent |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2399 && CHAR_TABLE_P (Vuse_default_ascent) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2400 && !NILP (Faref (Vuse_default_ascent, |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2401 make_number (it->char_to_display)))) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2402 highest = font_info->default_ascent + boff; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2403 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2404 /* Draw the first glyph at the normal position. It may be |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2405 shifted to right later if some other glyphs are drawn at |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2406 the left. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2407 cmp->offsets[0] = 0; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2408 cmp->offsets[1] = boff; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2409 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2410 /* Set cmp->offsets for the remaining glyphs. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2411 for (i = 1; i < cmp->glyph_len; i++) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2412 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2413 int left, right, btm, top; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2414 int ch = COMPOSITION_GLYPH (cmp, i); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2415 int face_id = FACE_FOR_CHAR (it->f, face, ch); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2416 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2417 face = FACE_FROM_ID (it->f, face_id); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2418 x_get_char_face_and_encoding (it->f, ch, face->id, &char2b, |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2419 it->multibyte_p); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2420 font = face->font; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2421 if (font == NULL) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2422 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2423 font = FRAME_FONT (it->f); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2424 boff = it->f->output_data.w32->baseline_offset; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2425 font_info = NULL; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2426 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2427 else |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2428 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2429 font_info |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2430 = FONT_INFO_FROM_ID (it->f, face->font_info_id); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2431 boff = font_info->baseline_offset; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2432 if (font_info->vertical_centering) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2433 boff = VCENTER_BASELINE_OFFSET (font, it->f) - boff; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2434 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2435 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2436 if (font->bdf && CHARSET_DIMENSION (CHAR_CHARSET (ch)) == 1) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2437 font_type = BDF_1D_FONT; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2438 else if (font->bdf) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2439 font_type = BDF_2D_FONT; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2440 else |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2441 font_type = UNICODE_FONT; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2442 |
|
34222
7e09cff3b2ab
(x_produce_glyphs): If a font for a component of
Jason Rumney <jasonr@gnu.org>
parents:
34135
diff
changeset
|
2443 if (font_info |
|
7e09cff3b2ab
(x_produce_glyphs): If a font for a component of
Jason Rumney <jasonr@gnu.org>
parents:
34135
diff
changeset
|
2444 && (pcm = w32_per_char_metric (font, &char2b, font_type))) |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2445 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2446 width = pcm->width; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2447 ascent = pcm->ascent; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2448 descent = pcm->descent; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2449 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2450 else |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2451 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2452 width = FONT_WIDTH (font); |
|
34222
7e09cff3b2ab
(x_produce_glyphs): If a font for a component of
Jason Rumney <jasonr@gnu.org>
parents:
34135
diff
changeset
|
2453 ascent = 1; |
|
7e09cff3b2ab
(x_produce_glyphs): If a font for a component of
Jason Rumney <jasonr@gnu.org>
parents:
34135
diff
changeset
|
2454 descent = 0; |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2455 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2456 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2457 if (cmp->method != COMPOSITION_WITH_RULE_ALTCHARS) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2458 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2459 /* Relative composition with or without |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2460 alternate chars. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2461 left = (leftmost + rightmost - width) / 2; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2462 btm = - descent + boff; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2463 if (font_info && font_info->relative_compose |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2464 && (! CHAR_TABLE_P (Vignore_relative_composition) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2465 || NILP (Faref (Vignore_relative_composition, |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2466 make_number (ch))))) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2467 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2468 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2469 if (- descent >= font_info->relative_compose) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2470 /* One extra pixel between two glyphs. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2471 btm = highest + 1; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2472 else if (ascent <= 0) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2473 /* One extra pixel between two glyphs. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2474 btm = lowest - 1 - ascent - descent; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2475 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2476 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2477 else |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2478 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2479 /* A composition rule is specified by an integer |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2480 value that encodes global and new reference |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2481 points (GREF and NREF). GREF and NREF are |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2482 specified by numbers as below: |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2483 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2484 0---1---2 -- ascent |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2485 | | |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2486 | | |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2487 | | |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2488 9--10--11 -- center |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2489 | | |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2490 ---3---4---5--- baseline |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2491 | | |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2492 6---7---8 -- descent |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2493 */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2494 int rule = COMPOSITION_RULE (cmp, i); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2495 int gref, nref, grefx, grefy, nrefx, nrefy; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2496 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2497 COMPOSITION_DECODE_RULE (rule, gref, nref); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2498 grefx = gref % 3, nrefx = nref % 3; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2499 grefy = gref / 3, nrefy = nref / 3; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2500 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2501 left = (leftmost |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2502 + grefx * (rightmost - leftmost) / 2 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2503 - nrefx * width / 2); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2504 btm = ((grefy == 0 ? highest |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2505 : grefy == 1 ? 0 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2506 : grefy == 2 ? lowest |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2507 : (highest + lowest) / 2) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2508 - (nrefy == 0 ? ascent + descent |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2509 : nrefy == 1 ? descent - boff |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2510 : nrefy == 2 ? 0 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2511 : (ascent + descent) / 2)); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2512 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2513 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2514 cmp->offsets[i * 2] = left; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2515 cmp->offsets[i * 2 + 1] = btm + descent; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2516 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2517 /* Update the bounding box of the overall glyphs. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2518 right = left + width; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2519 top = btm + descent + ascent; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2520 if (left < leftmost) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2521 leftmost = left; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2522 if (right > rightmost) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2523 rightmost = right; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2524 if (top > highest) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2525 highest = top; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2526 if (btm < lowest) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2527 lowest = btm; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2528 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2529 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2530 /* If there are glyphs whose x-offsets are negative, |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2531 shift all glyphs to the right and make all x-offsets |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2532 non-negative. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2533 if (leftmost < 0) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2534 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2535 for (i = 0; i < cmp->glyph_len; i++) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2536 cmp->offsets[i * 2] -= leftmost; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2537 rightmost -= leftmost; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2538 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2539 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2540 cmp->pixel_width = rightmost; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2541 cmp->ascent = highest; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2542 cmp->descent = - lowest; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2543 if (cmp->ascent < font_ascent) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2544 cmp->ascent = font_ascent; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2545 if (cmp->descent < font_descent) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2546 cmp->descent = font_descent; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2547 } |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2548 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2549 it->pixel_width = cmp->pixel_width; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2550 it->ascent = it->phys_ascent = cmp->ascent; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2551 it->descent = it->phys_descent = cmp->descent; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2552 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2553 if (face->box != FACE_NO_BOX) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2554 { |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2555 int thick = face->box_line_width; |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2556 |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2557 if (thick > 0) |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2558 { |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2559 it->ascent += thick; |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2560 it->descent += thick; |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2561 } |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2562 else |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2563 thick = - thick; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2564 |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2565 if (it->start_of_box_run_p) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2566 it->pixel_width += thick; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2567 if (it->end_of_box_run_p) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2568 it->pixel_width += thick; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2569 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2570 |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2571 /* If face has an overline, add the height of the overline |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2572 (1 pixel) and a 1 pixel margin to the character height. */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2573 if (face->overline_p) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2574 it->ascent += 2; |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2575 |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2576 take_vertical_position_into_account (it); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2577 |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2578 if (it->glyph_row) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
2579 x_append_composite_glyph (it); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2580 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2581 else if (it->what == IT_IMAGE) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2582 x_produce_image_glyph (it); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2583 else if (it->what == IT_STRETCH) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2584 x_produce_stretch_glyph (it); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2585 |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2586 /* Accumulate dimensions. Note: can't assume that it->descent > 0 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2587 because this isn't true for images with `:ascent 100'. */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2588 xassert (it->ascent >= 0 && it->descent >= 0); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2589 if (it->area == TEXT_AREA) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2590 it->current_x += it->pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2591 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2592 it->descent += it->extra_line_spacing; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2593 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2594 it->max_ascent = max (it->max_ascent, it->ascent); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2595 it->max_descent = max (it->max_descent, it->descent); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2596 it->max_phys_ascent = max (it->max_phys_ascent, it->phys_ascent); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2597 it->max_phys_descent = max (it->max_phys_descent, it->phys_descent); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2598 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2599 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2600 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2601 /* Estimate the pixel height of the mode or top line on frame F. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2602 FACE_ID specifies what line's height to estimate. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2603 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2604 int |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2605 x_estimate_mode_line_height (f, face_id) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2606 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2607 enum face_id face_id; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2608 { |
|
34135
2d899d158741
(x_estimate_mode_line_height): If `mode-line' face hasn't a font, use
Jason Rumney <jasonr@gnu.org>
parents:
34112
diff
changeset
|
2609 int height = FONT_HEIGHT (FRAME_FONT (f)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2610 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2611 /* This function is called so early when Emacs starts that the face |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2612 cache and mode line face are not yet initialized. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2613 if (FRAME_FACE_CACHE (f)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2614 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2615 struct face *face = FACE_FROM_ID (f, face_id); |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2616 if (face) |
|
34135
2d899d158741
(x_estimate_mode_line_height): If `mode-line' face hasn't a font, use
Jason Rumney <jasonr@gnu.org>
parents:
34112
diff
changeset
|
2617 { |
|
2d899d158741
(x_estimate_mode_line_height): If `mode-line' face hasn't a font, use
Jason Rumney <jasonr@gnu.org>
parents:
34112
diff
changeset
|
2618 if (face->font) |
|
2d899d158741
(x_estimate_mode_line_height): If `mode-line' face hasn't a font, use
Jason Rumney <jasonr@gnu.org>
parents:
34112
diff
changeset
|
2619 height = FONT_HEIGHT (face->font); |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2620 if (face->box_line_width > 0) |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
2621 height += 2 * face->box_line_width; |
|
34135
2d899d158741
(x_estimate_mode_line_height): If `mode-line' face hasn't a font, use
Jason Rumney <jasonr@gnu.org>
parents:
34112
diff
changeset
|
2622 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2623 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2624 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2625 return height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2626 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2627 |
| 13434 | 2628 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2629 /*********************************************************************** |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2630 Glyph display |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2631 ***********************************************************************/ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2632 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2633 /* A sequence of glyphs to be drawn in the same face. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2634 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2635 This data structure is not really completely X specific, so it |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2636 could possibly, at least partially, be useful for other systems. It |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2637 is currently not part of the external redisplay interface because |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2638 it's not clear what other systems will need. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2639 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2640 struct glyph_string |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2641 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2642 /* X-origin of the string. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2643 int x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2644 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2645 /* Y-origin and y-position of the base line of this string. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2646 int y, ybase; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2647 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2648 /* The width of the string, not including a face extension. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2649 int width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2650 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2651 /* The width of the string, including a face extension. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2652 int background_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2653 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2654 /* The height of this string. This is the height of the line this |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2655 string is drawn in, and can be different from the height of the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2656 font the string is drawn in. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2657 int height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2658 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2659 /* Number of pixels this string overwrites in front of its x-origin. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2660 This number is zero if the string has an lbearing >= 0; it is |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2661 -lbearing, if the string has an lbearing < 0. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2662 int left_overhang; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2663 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2664 /* Number of pixels this string overwrites past its right-most |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2665 nominal x-position, i.e. x + width. Zero if the string's |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2666 rbearing is <= its nominal width, rbearing - width otherwise. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2667 int right_overhang; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2668 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2669 /* The frame on which the glyph string is drawn. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2670 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2671 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2672 /* The window on which the glyph string is drawn. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2673 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2674 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2675 /* X display and window for convenience. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2676 Window window; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2677 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2678 /* The glyph row for which this string was built. It determines the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2679 y-origin and height of the string. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2680 struct glyph_row *row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2681 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2682 /* The area within row. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2683 enum glyph_row_area area; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2684 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2685 /* Characters to be drawn, and number of characters. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2686 wchar_t *char2b; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2687 int nchars; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2688 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2689 /* A face-override for drawing cursors, mouse face and similar. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2690 enum draw_glyphs_face hl; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2691 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2692 /* Face in which this string is to be drawn. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2693 struct face *face; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2694 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2695 /* Font in which this string is to be drawn. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2696 XFontStruct *font; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2697 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2698 /* Font info for this string. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2699 struct font_info *font_info; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2700 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2701 /* Non-null means this string describes (part of) a composition. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2702 All characters from char2b are drawn composed. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2703 struct composition *cmp; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2704 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2705 /* Index of this glyph string's first character in the glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2706 definition of CMP. If this is zero, this glyph string describes |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2707 the first character of a composition. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2708 int gidx; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2709 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2710 /* 1 means this glyph strings face has to be drawn to the right end |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2711 of the window's drawing area. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2712 unsigned extends_to_end_of_line_p : 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2713 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2714 /* 1 means the background of this string has been drawn. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2715 unsigned background_filled_p : 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2716 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2717 /* 1 means glyph string must be drawn with 16-bit functions. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2718 unsigned two_byte_p : 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2719 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2720 /* 1 means that the original font determined for drawing this glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2721 string could not be loaded. The member `font' has been set to |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2722 the frame's default font in this case. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2723 unsigned font_not_found_p : 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2724 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2725 /* 1 means that the face in which this glyph string is drawn has a |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2726 stipple pattern. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2727 unsigned stippled_p : 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2728 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2729 /* 1 means only the foreground of this glyph string must be drawn, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2730 and we should use the physical height of the line this glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2731 string appears in as clip rect. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2732 unsigned for_overlaps_p : 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2733 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2734 /* The GC to use for drawing this glyph string. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2735 XGCValues *gc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2736 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2737 HDC hdc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2738 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2739 /* A pointer to the first glyph in the string. This glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2740 corresponds to char2b[0]. Needed to draw rectangles if |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2741 font_not_found_p is 1. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2742 struct glyph *first_glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2743 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2744 /* Image, if any. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2745 struct image *img; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2746 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2747 struct glyph_string *next, *prev; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2748 }; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2749 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2750 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2751 /* Encapsulate the different ways of displaying text under W32. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2752 |
|
43470
842910bb2fc0
(w32_text_out): Renamed from W32_TEXTOUT.
Jason Rumney <jasonr@gnu.org>
parents:
43408
diff
changeset
|
2753 static void |
|
842910bb2fc0
(w32_text_out): Renamed from W32_TEXTOUT.
Jason Rumney <jasonr@gnu.org>
parents:
43408
diff
changeset
|
2754 w32_text_out (s, x, y,chars,nchars) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2755 struct glyph_string * s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2756 int x, y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2757 wchar_t * chars; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2758 int nchars; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2759 { |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2760 int charset_dim = w32_font_is_double_byte (s->gc->font) ? 2 : 1; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2761 if (s->gc->font->bdf) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2762 w32_BDF_TextOut (s->gc->font->bdf, s->hdc, |
|
33037
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
2763 x, y, (char *) chars, charset_dim, |
|
365605845e33
(w32_bdf_per_char_metric): Negate descent.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
2764 nchars * charset_dim, 0); |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2765 else if (s->first_glyph->w32_font_type == UNICODE_FONT) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2766 ExtTextOutW (s->hdc, x, y, 0, NULL, chars, nchars, NULL); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2767 else |
|
43470
842910bb2fc0
(w32_text_out): Renamed from W32_TEXTOUT.
Jason Rumney <jasonr@gnu.org>
parents:
43408
diff
changeset
|
2768 ExtTextOutA (s->hdc, x, y, 0, NULL, (char *) chars, |
|
842910bb2fc0
(w32_text_out): Renamed from W32_TEXTOUT.
Jason Rumney <jasonr@gnu.org>
parents:
43408
diff
changeset
|
2769 nchars * charset_dim, NULL); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2770 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2771 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
2772 #if GLYPH_DEBUG |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2773 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2774 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2775 x_dump_glyph_string (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2776 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2777 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2778 fprintf (stderr, "glyph string\n"); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2779 fprintf (stderr, " x, y, w, h = %d, %d, %d, %d\n", |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2780 s->x, s->y, s->width, s->height); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2781 fprintf (stderr, " ybase = %d\n", s->ybase); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2782 fprintf (stderr, " hl = %d\n", s->hl); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2783 fprintf (stderr, " left overhang = %d, right = %d\n", |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2784 s->left_overhang, s->right_overhang); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2785 fprintf (stderr, " nchars = %d\n", s->nchars); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2786 fprintf (stderr, " extends to end of line = %d\n", |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2787 s->extends_to_end_of_line_p); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2788 fprintf (stderr, " font height = %d\n", FONT_HEIGHT (s->font)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2789 fprintf (stderr, " bg width = %d\n", s->background_width); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2790 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2791 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2792 #endif /* GLYPH_DEBUG */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2793 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2794 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2795 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2796 static void x_append_glyph_string_lists P_ ((struct glyph_string **, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2797 struct glyph_string **, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2798 struct glyph_string *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2799 struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2800 static void x_prepend_glyph_string_lists P_ ((struct glyph_string **, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2801 struct glyph_string **, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2802 struct glyph_string *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2803 struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2804 static void x_append_glyph_string P_ ((struct glyph_string **, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2805 struct glyph_string **, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2806 struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2807 static int x_left_overwritten P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2808 static int x_left_overwriting P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2809 static int x_right_overwritten P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2810 static int x_right_overwriting P_ ((struct glyph_string *)); |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2811 static int x_fill_glyph_string P_ ((struct glyph_string *, int, int, int, |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2812 int)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2813 static void w32_init_glyph_string P_ ((struct glyph_string *, HDC hdc, |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2814 wchar_t *, struct window *, |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2815 struct glyph_row *, |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2816 enum glyph_row_area, int, |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2817 enum draw_glyphs_face)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2818 static int x_draw_glyphs P_ ((struct window *, int , struct glyph_row *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2819 enum glyph_row_area, int, int, |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
2820 enum draw_glyphs_face, int)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2821 static void x_set_glyph_string_clipping P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2822 static void x_set_glyph_string_gc P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2823 static void x_draw_glyph_string_background P_ ((struct glyph_string *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2824 int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2825 static void x_draw_glyph_string_foreground P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2826 static void x_draw_composite_glyph_string_foreground P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2827 static void x_draw_glyph_string_box P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2828 static void x_draw_glyph_string P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2829 static void x_compute_glyph_string_overhangs P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2830 static void x_set_cursor_gc P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2831 static void x_set_mode_line_face_gc P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2832 static void x_set_mouse_face_gc P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2833 static void w32_get_glyph_overhangs P_ ((HDC hdc, struct glyph *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2834 struct frame *, |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
2835 int *, int *)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2836 static void x_compute_overhangs_and_x P_ ((struct glyph_string *, int, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2837 static int w32_alloc_lighter_color (struct frame *, COLORREF *, double, int); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2838 static void w32_setup_relief_color P_ ((struct frame *, struct relief *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2839 double, int, COLORREF)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2840 static void x_setup_relief_colors P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2841 static void x_draw_image_glyph_string P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2842 static void x_draw_image_relief P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2843 static void x_draw_image_foreground P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2844 static void w32_draw_image_foreground_1 P_ ((struct glyph_string *, HBITMAP)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2845 static void x_fill_image_glyph_string P_ ((struct glyph_string *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2846 static void x_clear_glyph_string_rect P_ ((struct glyph_string *, int, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2847 int, int, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2848 static void w32_draw_relief_rect P_ ((struct frame *, int, int, int, int, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2849 int, int, int, int, RECT *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2850 static void w32_draw_box_rect P_ ((struct glyph_string *, int, int, int, int, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2851 int, int, int, RECT *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2852 static void x_fix_overlapping_area P_ ((struct window *, struct glyph_row *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2853 enum glyph_row_area)); |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2854 static int x_fill_stretch_glyph_string P_ ((struct glyph_string *, |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2855 struct glyph_row *, |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2856 enum glyph_row_area, int, int)); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2857 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2858 #if GLYPH_DEBUG |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2859 static void x_check_font P_ ((struct frame *, XFontStruct *)); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2860 #endif |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2861 |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2862 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2863 /* Append the list of glyph strings with head H and tail T to the list |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2864 with head *HEAD and tail *TAIL. Set *HEAD and *TAIL to the result. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2865 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2866 static INLINE void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2867 x_append_glyph_string_lists (head, tail, h, t) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2868 struct glyph_string **head, **tail; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2869 struct glyph_string *h, *t; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2870 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2871 if (h) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2872 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2873 if (*head) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2874 (*tail)->next = h; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2875 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2876 *head = h; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2877 h->prev = *tail; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2878 *tail = t; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2879 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2880 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2881 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2882 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2883 /* Prepend the list of glyph strings with head H and tail T to the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2884 list with head *HEAD and tail *TAIL. Set *HEAD and *TAIL to the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2885 result. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2886 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2887 static INLINE void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2888 x_prepend_glyph_string_lists (head, tail, h, t) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2889 struct glyph_string **head, **tail; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2890 struct glyph_string *h, *t; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2891 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2892 if (h) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2893 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2894 if (*head) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2895 (*head)->prev = t; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2896 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2897 *tail = t; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2898 t->next = *head; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2899 *head = h; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2900 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2901 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2902 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2903 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2904 /* Append glyph string S to the list with head *HEAD and tail *TAIL. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2905 Set *HEAD and *TAIL to the resulting list. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2906 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2907 static INLINE void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2908 x_append_glyph_string (head, tail, s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2909 struct glyph_string **head, **tail; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2910 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2911 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2912 s->next = s->prev = NULL; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2913 x_append_glyph_string_lists (head, tail, s, s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2914 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2915 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2916 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2917 /* Set S->gc to a suitable GC for drawing glyph string S in cursor |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2918 face. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2919 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2920 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2921 x_set_cursor_gc (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2922 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2923 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2924 if (s->font == FRAME_FONT (s->f) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2925 && s->face->background == FRAME_BACKGROUND_PIXEL (s->f) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2926 && s->face->foreground == FRAME_FOREGROUND_PIXEL (s->f) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2927 && !s->cmp) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2928 s->gc = s->f->output_data.w32->cursor_gc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2929 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2930 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2931 /* Cursor on non-default face: must merge. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2932 XGCValues xgcv; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2933 unsigned long mask; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2934 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2935 xgcv.background = s->f->output_data.w32->cursor_pixel; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2936 xgcv.foreground = s->face->background; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2937 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2938 /* If the glyph would be invisible, try a different foreground. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2939 if (xgcv.foreground == xgcv.background) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2940 xgcv.foreground = s->face->foreground; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2941 if (xgcv.foreground == xgcv.background) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2942 xgcv.foreground = s->f->output_data.w32->cursor_foreground_pixel; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2943 if (xgcv.foreground == xgcv.background) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2944 xgcv.foreground = s->face->foreground; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2945 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2946 /* Make sure the cursor is distinct from text in this face. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2947 if (xgcv.background == s->face->background |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2948 && xgcv.foreground == s->face->foreground) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2949 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2950 xgcv.background = s->face->foreground; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2951 xgcv.foreground = s->face->background; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2952 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2953 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2954 IF_DEBUG (x_check_font (s->f, s->font)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2955 xgcv.font = s->font; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2956 mask = GCForeground | GCBackground | GCFont; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2957 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2958 if (FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2959 XChangeGC (NULL, FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2960 mask, &xgcv); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2961 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2962 FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2963 = XCreateGC (NULL, s->window, mask, &xgcv); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2964 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2965 s->gc = FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2966 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2967 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2968 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2969 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2970 /* Set up S->gc of glyph string S for drawing text in mouse face. */ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2971 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2972 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2973 x_set_mouse_face_gc (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2974 struct glyph_string *s; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2975 { |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2976 int face_id; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2977 struct face *face; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2978 |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2979 /* What face has to be used last for the mouse face? */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2980 face_id = FRAME_W32_DISPLAY_INFO (s->f)->mouse_face_face_id; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
2981 face = FACE_FROM_ID (s->f, face_id); |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2982 if (face == NULL) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2983 face = FACE_FROM_ID (s->f, MOUSE_FACE_ID); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
2984 |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2985 if (s->first_glyph->type == CHAR_GLYPH) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2986 face_id = FACE_FOR_CHAR (s->f, face, s->first_glyph->u.ch); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2987 else |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
2988 face_id = FACE_FOR_CHAR (s->f, face, 0); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2989 s->face = FACE_FROM_ID (s->f, face_id); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2990 PREPARE_FACE_FOR_DISPLAY (s->f, s->face); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2991 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2992 /* If font in this face is same as S->font, use it. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2993 if (s->font == s->face->font) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2994 s->gc = s->face->gc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2995 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2996 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2997 /* Otherwise construct scratch_cursor_gc with values from FACE |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2998 but font FONT. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
2999 XGCValues xgcv; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3000 unsigned long mask; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3001 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3002 xgcv.background = s->face->background; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3003 xgcv.foreground = s->face->foreground; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3004 IF_DEBUG (x_check_font (s->f, s->font)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3005 xgcv.font = s->font; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3006 mask = GCForeground | GCBackground | GCFont; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3007 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3008 if (FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3009 XChangeGC (NULL, FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3010 mask, &xgcv); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3011 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3012 FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3013 = XCreateGC (NULL, s->window, mask, &xgcv); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3014 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3015 s->gc = FRAME_W32_DISPLAY_INFO (s->f)->scratch_cursor_gc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3016 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3017 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3018 xassert (s->gc != 0); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3019 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3020 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3021 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3022 /* Set S->gc of glyph string S to a GC suitable for drawing a mode line. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3023 Faces to use in the mode line have already been computed when the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3024 matrix was built, so there isn't much to do, here. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3025 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3026 static INLINE void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3027 x_set_mode_line_face_gc (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3028 struct glyph_string *s; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3029 { |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3030 s->gc = s->face->gc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3031 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3032 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3033 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3034 /* Set S->gc of glyph string S for drawing that glyph string. Set |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3035 S->stippled_p to a non-zero value if the face of S has a stipple |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3036 pattern. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3037 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3038 static INLINE void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3039 x_set_glyph_string_gc (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3040 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3041 { |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
3042 PREPARE_FACE_FOR_DISPLAY (s->f, s->face); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3043 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3044 if (s->hl == DRAW_NORMAL_TEXT) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3045 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3046 s->gc = s->face->gc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3047 s->stippled_p = s->face->stipple != 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3048 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3049 else if (s->hl == DRAW_INVERSE_VIDEO) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3050 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3051 x_set_mode_line_face_gc (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3052 s->stippled_p = s->face->stipple != 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3053 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3054 else if (s->hl == DRAW_CURSOR) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3055 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3056 x_set_cursor_gc (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3057 s->stippled_p = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3058 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3059 else if (s->hl == DRAW_MOUSE_FACE) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3060 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3061 x_set_mouse_face_gc (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3062 s->stippled_p = s->face->stipple != 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3063 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3064 else if (s->hl == DRAW_IMAGE_RAISED |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3065 || s->hl == DRAW_IMAGE_SUNKEN) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3066 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3067 s->gc = s->face->gc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3068 s->stippled_p = s->face->stipple != 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3069 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3070 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3071 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3072 s->gc = s->face->gc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3073 s->stippled_p = s->face->stipple != 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3074 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3075 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3076 /* GC must have been set. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3077 xassert (s->gc != 0); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3078 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3079 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3080 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3081 /* Return in *R the clipping rectangle for glyph string S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3082 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3083 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3084 w32_get_glyph_string_clip_rect (s, r) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3085 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3086 RECT *r; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3087 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3088 int r_height, r_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3089 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3090 if (s->row->full_width_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3091 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3092 /* Draw full-width. X coordinates are relative to S->w->left. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3093 int canon_x = CANON_X_UNIT (s->f); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3094 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3095 r->left = WINDOW_LEFT_MARGIN (s->w) * canon_x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3096 r_width = XFASTINT (s->w->width) * canon_x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3097 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3098 if (FRAME_HAS_VERTICAL_SCROLL_BARS (s->f)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3099 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3100 int width = FRAME_SCROLL_BAR_WIDTH (s->f) * canon_x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3101 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT (s->f)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3102 r->left -= width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3103 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3104 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3105 r->left += FRAME_INTERNAL_BORDER_WIDTH (s->f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3106 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3107 /* Unless displaying a mode or menu bar line, which are always |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3108 fully visible, clip to the visible part of the row. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3109 if (s->w->pseudo_window_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3110 r_height = s->row->visible_height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3111 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3112 r_height = s->height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3113 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3114 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3115 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3116 /* This is a text line that may be partially visible. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3117 r->left = WINDOW_AREA_TO_FRAME_PIXEL_X (s->w, s->area, 0); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3118 r_width = window_box_width (s->w, s->area); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3119 r_height = s->row->visible_height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3120 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3121 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3122 /* If S draws overlapping rows, it's sufficient to use the top and |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3123 bottom of the window for clipping because this glyph string |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3124 intentionally draws over other lines. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3125 if (s->for_overlaps_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3126 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3127 r->top = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (s->w); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3128 r_height = window_text_bottom_y (s->w) - r->top; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3129 } |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3130 else |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3131 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3132 /* Don't use S->y for clipping because it doesn't take partially |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3133 visible lines into account. For example, it can be negative for |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3134 partially visible lines at the top of a window. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3135 if (!s->row->full_width_p |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3136 && MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P (s->w, s->row)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3137 r->top = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (s->w); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3138 else |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3139 r->top = max (0, s->row->y); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3140 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3141 /* If drawing a tool-bar window, draw it over the internal border |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3142 at the top of the window. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3143 if (s->w == XWINDOW (s->f->tool_bar_window)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3144 r->top -= s->f->output_data.w32->internal_border_width; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3145 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3146 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3147 r->top = WINDOW_TO_FRAME_PIXEL_Y (s->w, r->top); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3148 |
|
48360
033719ff91f1
(w32_get_glyph_string_clip_rect): Clip cursor tightly.
Jason Rumney <jasonr@gnu.org>
parents:
48352
diff
changeset
|
3149 /* If drawing the cursor, don't let glyph draw outside its |
|
033719ff91f1
(w32_get_glyph_string_clip_rect): Clip cursor tightly.
Jason Rumney <jasonr@gnu.org>
parents:
48352
diff
changeset
|
3150 advertised boundaries. Cleartype does this under some circumstances. */ |
|
033719ff91f1
(w32_get_glyph_string_clip_rect): Clip cursor tightly.
Jason Rumney <jasonr@gnu.org>
parents:
48352
diff
changeset
|
3151 if (s->hl == DRAW_CURSOR) |
|
033719ff91f1
(w32_get_glyph_string_clip_rect): Clip cursor tightly.
Jason Rumney <jasonr@gnu.org>
parents:
48352
diff
changeset
|
3152 { |
|
033719ff91f1
(w32_get_glyph_string_clip_rect): Clip cursor tightly.
Jason Rumney <jasonr@gnu.org>
parents:
48352
diff
changeset
|
3153 if (s->x > r->left) |
|
033719ff91f1
(w32_get_glyph_string_clip_rect): Clip cursor tightly.
Jason Rumney <jasonr@gnu.org>
parents:
48352
diff
changeset
|
3154 { |
|
033719ff91f1
(w32_get_glyph_string_clip_rect): Clip cursor tightly.
Jason Rumney <jasonr@gnu.org>
parents:
48352
diff
changeset
|
3155 r_width -= s->x - r->left; |
|
033719ff91f1
(w32_get_glyph_string_clip_rect): Clip cursor tightly.
Jason Rumney <jasonr@gnu.org>
parents:
48352
diff
changeset
|
3156 r->left = s->x; |
|
033719ff91f1
(w32_get_glyph_string_clip_rect): Clip cursor tightly.
Jason Rumney <jasonr@gnu.org>
parents:
48352
diff
changeset
|
3157 } |
|
033719ff91f1
(w32_get_glyph_string_clip_rect): Clip cursor tightly.
Jason Rumney <jasonr@gnu.org>
parents:
48352
diff
changeset
|
3158 r_width = min (r_width, s->first_glyph->pixel_width); |
|
033719ff91f1
(w32_get_glyph_string_clip_rect): Clip cursor tightly.
Jason Rumney <jasonr@gnu.org>
parents:
48352
diff
changeset
|
3159 } |
|
033719ff91f1
(w32_get_glyph_string_clip_rect): Clip cursor tightly.
Jason Rumney <jasonr@gnu.org>
parents:
48352
diff
changeset
|
3160 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3161 r->bottom = r->top + r_height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3162 r->right = r->left + r_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3163 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3164 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3165 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3166 /* Set clipping for output of glyph string S. S may be part of a mode |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3167 line or menu if we don't have X toolkit support. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3168 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3169 static INLINE void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3170 x_set_glyph_string_clipping (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3171 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3172 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3173 RECT r; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3174 w32_get_glyph_string_clip_rect (s, &r); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3175 w32_set_clip_rectangle (s->hdc, &r); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3176 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3177 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3178 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3179 /* Compute left and right overhang of glyph string S. If S is a glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3180 string for a composition, assume overhangs don't exist. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3181 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3182 static INLINE void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3183 x_compute_glyph_string_overhangs (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3184 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3185 { |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3186 /* TODO: Windows does not appear to have a method for |
|
30988
a69a2ac4345b
(help_echo_window): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
30730
diff
changeset
|
3187 getting this info without getting the ABC widths for each |
|
a69a2ac4345b
(help_echo_window): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
30730
diff
changeset
|
3188 individual character and working it out manually. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3189 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3190 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3191 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3192 /* Compute overhangs and x-positions for glyph string S and its |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3193 predecessors, or successors. X is the starting x-position for S. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3194 BACKWARD_P non-zero means process predecessors. */ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3195 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3196 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3197 x_compute_overhangs_and_x (s, x, backward_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3198 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3199 int x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3200 int backward_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3201 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3202 if (backward_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3203 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3204 while (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3205 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3206 x_compute_glyph_string_overhangs (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3207 x -= s->width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3208 s->x = x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3209 s = s->prev; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3210 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3211 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3212 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3213 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3214 while (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3215 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3216 x_compute_glyph_string_overhangs (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3217 s->x = x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3218 x += s->width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3219 s = s->next; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3220 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3221 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3222 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3223 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3224 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3225 /* Set *LEFT and *RIGHT to the left and right overhang of GLYPH on |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3226 frame F. Overhangs of glyphs other than type CHAR_GLYPH are |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3227 assumed to be zero. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3228 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3229 static void |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
3230 w32_get_glyph_overhangs (hdc, glyph, f, left, right) |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
3231 HDC hdc; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3232 struct glyph *glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3233 struct frame *f; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
3234 int *left, *right; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3235 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3236 *left = *right = 0; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3237 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3238 if (glyph->type == CHAR_GLYPH) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3239 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3240 XFontStruct *font; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3241 struct face *face; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3242 wchar_t char2b; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
3243 XCharStruct *pcm; |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
3244 |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
3245 face = x_get_glyph_face_and_encoding (f, glyph, &char2b, NULL); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3246 font = face->font; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
3247 |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
3248 if (font |
|
32720
8530cd0a7455
(w32_per_char_metric): Remove HDC argument. Use
Andrew Innes <andrewi@gnu.org>
parents:
32670
diff
changeset
|
3249 && (pcm = w32_per_char_metric (font, &char2b, |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
3250 glyph->w32_font_type))) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3251 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3252 if (pcm->rbearing > pcm->width) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3253 *right = pcm->rbearing - pcm->width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3254 if (pcm->lbearing < 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3255 *left = -pcm->lbearing; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3256 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3257 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3258 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3259 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3260 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3261 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3262 x_get_glyph_overhangs (glyph, f, left, right) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3263 struct glyph *glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3264 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3265 int *left, *right; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3266 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3267 HDC hdc = get_frame_dc (f); |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
3268 /* Convert to unicode! */ |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
3269 w32_get_glyph_overhangs (hdc, glyph, f, left, right); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3270 release_frame_dc (f, hdc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3271 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3272 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3273 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3274 /* Return the index of the first glyph preceding glyph string S that |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3275 is overwritten by S because of S's left overhang. Value is -1 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3276 if no glyphs are overwritten. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3277 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3278 static int |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3279 x_left_overwritten (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3280 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3281 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3282 int k; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3283 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3284 if (s->left_overhang) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3285 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3286 int x = 0, i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3287 struct glyph *glyphs = s->row->glyphs[s->area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3288 int first = s->first_glyph - glyphs; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3289 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3290 for (i = first - 1; i >= 0 && x > -s->left_overhang; --i) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3291 x -= glyphs[i].pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3292 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3293 k = i + 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3294 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3295 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3296 k = -1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3297 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3298 return k; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3299 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3300 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3301 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3302 /* Return the index of the first glyph preceding glyph string S that |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3303 is overwriting S because of its right overhang. Value is -1 if no |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3304 glyph in front of S overwrites S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3305 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3306 static int |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3307 x_left_overwriting (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3308 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3309 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3310 int i, k, x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3311 struct glyph *glyphs = s->row->glyphs[s->area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3312 int first = s->first_glyph - glyphs; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3313 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3314 k = -1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3315 x = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3316 for (i = first - 1; i >= 0; --i) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3317 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3318 int left, right; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
3319 w32_get_glyph_overhangs (s->hdc, glyphs + i, s->f, &left, &right); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3320 if (x + right > 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3321 k = i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3322 x -= glyphs[i].pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3323 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3324 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3325 return k; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3326 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3327 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3328 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3329 /* Return the index of the last glyph following glyph string S that is |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3330 not overwritten by S because of S's right overhang. Value is -1 if |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3331 no such glyph is found. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3332 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3333 static int |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3334 x_right_overwritten (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3335 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3336 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3337 int k = -1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3338 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3339 if (s->right_overhang) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3340 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3341 int x = 0, i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3342 struct glyph *glyphs = s->row->glyphs[s->area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3343 int first = (s->first_glyph - glyphs) + (s->cmp ? 1 : s->nchars); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3344 int end = s->row->used[s->area]; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3345 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3346 for (i = first; i < end && s->right_overhang > x; ++i) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3347 x += glyphs[i].pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3348 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3349 k = i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3350 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3351 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3352 return k; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3353 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3354 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3355 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3356 /* Return the index of the last glyph following glyph string S that |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3357 overwrites S because of its left overhang. Value is negative |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3358 if no such glyph is found. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3359 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3360 static int |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3361 x_right_overwriting (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3362 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3363 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3364 int i, k, x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3365 int end = s->row->used[s->area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3366 struct glyph *glyphs = s->row->glyphs[s->area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3367 int first = (s->first_glyph - glyphs) + (s->cmp ? 1 : s->nchars); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3368 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3369 k = -1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3370 x = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3371 for (i = first; i < end; ++i) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3372 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3373 int left, right; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
3374 w32_get_glyph_overhangs (s->hdc, glyphs + i, s->f, &left, &right); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3375 if (x - left < 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3376 k = i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3377 x += glyphs[i].pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3378 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3379 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3380 return k; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3381 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3382 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3383 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3384 /* Fill rectangle X, Y, W, H with background color of glyph string S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3385 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3386 static INLINE void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3387 x_clear_glyph_string_rect (s, x, y, w, h) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3388 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3389 int x, y, w, h; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3390 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3391 int real_x = x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3392 int real_y = y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3393 int real_w = w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3394 int real_h = h; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3395 #if 0 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3396 /* Take clipping into account. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3397 if (s->gc->clip_mask == Rect) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3398 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3399 real_x = max (real_x, s->gc->clip_rectangle.left); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3400 real_y = max (real_y, s->gc->clip_rectangle.top); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3401 real_w = min (real_w, s->gc->clip_rectangle.right |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3402 - s->gc->clip_rectangle.left); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3403 real_h = min (real_h, s->gc->clip_rectangle.bottom |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3404 - s->gc->clip_rectangle.top); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3405 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3406 #endif |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3407 w32_fill_area (s->f, s->hdc, s->gc->background, real_x, real_y, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3408 real_w, real_h); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3409 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3410 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3411 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3412 /* Draw the background of glyph_string S. If S->background_filled_p |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3413 is non-zero don't draw it. FORCE_P non-zero means draw the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3414 background even if it wouldn't be drawn normally. This is used |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3415 when a string preceding S draws into the background of S, or S |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3416 contains the first component of a composition. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3417 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3418 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3419 x_draw_glyph_string_background (s, force_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3420 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3421 int force_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3422 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3423 /* Nothing to do if background has already been drawn or if it |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3424 shouldn't be drawn in the first place. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3425 if (!s->background_filled_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3426 { |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
3427 int box_line_width = max (s->face->box_line_width, 0); |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
3428 |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3429 #if 0 /* TODO: stipple */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3430 if (s->stippled_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3431 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3432 /* Fill background with a stipple pattern. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3433 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3434 XFillRectangle (s->display, s->window, s->gc, s->x, |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
3435 s->y + box_line_width, |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3436 s->background_width, |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
3437 s->height - 2 * box_line_width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3438 XSetFillStyle (s->display, s->gc, FillSolid); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3439 s->background_filled_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3440 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3441 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3442 #endif |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
3443 if (FONT_HEIGHT (s->font) < s->height - 2 * box_line_width |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3444 || s->font_not_found_p |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3445 || s->extends_to_end_of_line_p |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
3446 || s->font->bdf |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3447 || force_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3448 { |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
3449 x_clear_glyph_string_rect (s, s->x, s->y + box_line_width, |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3450 s->background_width, |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
3451 s->height - 2 * box_line_width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3452 s->background_filled_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3453 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3454 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3455 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3456 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3457 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3458 /* Draw the foreground of glyph string S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3459 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3460 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3461 x_draw_glyph_string_foreground (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3462 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3463 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3464 int i, x; |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3465 HFONT old_font; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3466 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3467 /* If first glyph of S has a left box line, start drawing the text |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3468 of S to the right of that box line. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3469 if (s->face->box != FACE_NO_BOX |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3470 && s->first_glyph->left_box_line_p) |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
3471 x = s->x + abs (s->face->box_line_width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3472 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3473 x = s->x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3474 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3475 if (s->for_overlaps_p || (s->background_filled_p && s->hl != DRAW_CURSOR)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3476 SetBkMode (s->hdc, TRANSPARENT); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3477 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3478 SetBkMode (s->hdc, OPAQUE); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3479 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3480 SetTextColor (s->hdc, s->gc->foreground); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3481 SetBkColor (s->hdc, s->gc->background); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3482 SetTextAlign (s->hdc, TA_BASELINE | TA_LEFT); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3483 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3484 if (s->font && s->font->hfont) |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3485 old_font = SelectObject (s->hdc, s->font->hfont); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3486 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3487 /* Draw characters of S as rectangles if S's font could not be |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3488 loaded. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3489 if (s->font_not_found_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3490 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3491 for (i = 0; i < s->nchars; ++i) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3492 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3493 struct glyph *g = s->first_glyph + i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3494 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3495 w32_draw_rectangle (s->hdc, s->gc, x, s->y, g->pixel_width - 1, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3496 s->height - 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3497 x += g->pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3498 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3499 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3500 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3501 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3502 char *char1b = (char *) s->char2b; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3503 int boff = s->font_info->baseline_offset; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3504 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3505 if (s->font_info->vertical_centering) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3506 boff = VCENTER_BASELINE_OFFSET (s->font, s->f) - boff; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3507 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3508 /* If we can use 8-bit functions, condense S->char2b. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3509 if (!s->two_byte_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3510 for (i = 0; i < s->nchars; ++i) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3511 char1b[i] = BYTE2 (s->char2b[i]); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3512 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3513 /* Draw text with TextOut and friends. */ |
|
43470
842910bb2fc0
(w32_text_out): Renamed from W32_TEXTOUT.
Jason Rumney <jasonr@gnu.org>
parents:
43408
diff
changeset
|
3514 w32_text_out (s, x, s->ybase - boff, s->char2b, s->nchars); |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3515 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3516 if (s->face->overstrike) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3517 { |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3518 /* For overstriking (to simulate bold-face), draw the |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3519 characters again shifted to the right by one pixel. */ |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3520 w32_text_out (s, x + 1, s->ybase - boff, s->char2b, s->nchars); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3521 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3522 } |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3523 if (s->font && s->font->hfont) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3524 SelectObject (s->hdc, old_font); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3525 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3526 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3527 /* Draw the foreground of composite glyph string S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3528 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3529 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3530 x_draw_composite_glyph_string_foreground (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3531 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3532 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3533 int i, x; |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3534 HFONT old_font; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3535 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3536 /* If first glyph of S has a left box line, start drawing the text |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3537 of S to the right of that box line. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3538 if (s->face->box != FACE_NO_BOX |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3539 && s->first_glyph->left_box_line_p) |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
3540 x = s->x + abs (s->face->box_line_width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3541 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3542 x = s->x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3543 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3544 /* S is a glyph string for a composition. S->gidx is the index of |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3545 the first character drawn for glyphs of this composition. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3546 S->gidx == 0 means we are drawing the very first character of |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3547 this composition. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3548 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3549 SetTextColor (s->hdc, s->gc->foreground); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3550 SetBkColor (s->hdc, s->gc->background); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3551 SetBkMode (s->hdc, TRANSPARENT); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3552 SetTextAlign (s->hdc, TA_BASELINE | TA_LEFT); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3553 |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3554 if (s->font && s->font->hfont) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3555 old_font = SelectObject (s->hdc, s->font->hfont); |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3556 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3557 /* Draw a rectangle for the composition if the font for the very |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3558 first character of the composition could not be loaded. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3559 if (s->font_not_found_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3560 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3561 if (s->gidx == 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3562 w32_draw_rectangle (s->hdc, s->gc, x, s->y, s->width - 1, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3563 s->height - 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3564 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3565 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3566 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3567 for (i = 0; i < s->nchars; i++, ++s->gidx) |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3568 { |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3569 w32_text_out (s, x + s->cmp->offsets[s->gidx * 2], |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3570 s->ybase - s->cmp->offsets[s->gidx * 2 + 1], |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3571 s->char2b + i, 1); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3572 if (s->face->overstrike) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3573 w32_text_out (s, x + s->cmp->offsets[s->gidx * 2] + 1, |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3574 s->ybase - s->cmp->offsets[s->gidx * 2 + 1], |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3575 s->char2b + i, 1); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3576 } |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3577 } |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
3578 |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3579 if (s->font && s->font->hfont) |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3580 SelectObject (s->hdc, old_font); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3581 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3582 |
|
33524
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3583 |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3584 /* Brightness beyond which a color won't have its highlight brightness |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3585 boosted. |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3586 |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3587 Nominally, highlight colors for `3d' faces are calculated by |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3588 brightening an object's color by a constant scale factor, but this |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3589 doesn't yield good results for dark colors, so for colors who's |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3590 brightness is less than this value (on a scale of 0-255) have to |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3591 use an additional additive factor. |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3592 |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3593 The value here is set so that the default menu-bar/mode-line color |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3594 (grey75) will not have its highlights changed at all. */ |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3595 #define HIGHLIGHT_COLOR_DARK_BOOST_LIMIT 187 |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3596 |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3597 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3598 /* Allocate a color which is lighter or darker than *COLOR by FACTOR |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3599 or DELTA. Try a color with RGB values multiplied by FACTOR first. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3600 If this produces the same color as COLOR, try a color where all RGB |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3601 values have DELTA added. Return the allocated color in *COLOR. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3602 DISPLAY is the X display, CMAP is the colormap to operate on. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3603 Value is non-zero if successful. */ |
| 13434 | 3604 |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
3605 static int |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3606 w32_alloc_lighter_color (f, color, factor, delta) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3607 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3608 COLORREF *color; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3609 double factor; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3610 int delta; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3611 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3612 COLORREF new; |
|
33524
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3613 long bright; |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3614 |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3615 /* On Windows, RGB values are 0-255, not 0-65535, so scale delta. */ |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3616 delta /= 256; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3617 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3618 /* Change RGB values by specified FACTOR. Avoid overflow! */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3619 xassert (factor >= 0); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3620 new = PALETTERGB (min (0xff, factor * GetRValue (*color)), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3621 min (0xff, factor * GetGValue (*color)), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3622 min (0xff, factor * GetBValue (*color))); |
|
33524
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3623 |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3624 /* Calculate brightness of COLOR. */ |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3625 bright = (2 * GetRValue (*color) + 3 * GetGValue (*color) |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3626 + GetBValue (*color)) / 6; |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3627 |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3628 /* We only boost colors that are darker than |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3629 HIGHLIGHT_COLOR_DARK_BOOST_LIMIT. */ |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3630 if (bright < HIGHLIGHT_COLOR_DARK_BOOST_LIMIT) |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3631 /* Make an additive adjustment to NEW, because it's dark enough so |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3632 that scaling by FACTOR alone isn't enough. */ |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3633 { |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3634 /* How far below the limit this color is (0 - 1, 1 being darker). */ |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3635 double dimness = 1 - (double)bright / HIGHLIGHT_COLOR_DARK_BOOST_LIMIT; |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3636 /* The additive adjustment. */ |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3637 int min_delta = delta * dimness * factor / 2; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3638 |
|
33524
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3639 if (factor < 1) |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3640 new = PALETTERGB (max (0, min (0xff, min_delta - GetRValue (*color))), |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3641 max (0, min (0xff, min_delta - GetGValue (*color))), |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3642 max (0, min (0xff, min_delta - GetBValue (*color)))); |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3643 else |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3644 new = PALETTERGB (max (0, min (0xff, min_delta + GetRValue (*color))), |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3645 max (0, min (0xff, min_delta + GetGValue (*color))), |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3646 max (0, min (0xff, min_delta + GetBValue (*color)))); |
|
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3647 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3648 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3649 if (new == *color) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3650 new = PALETTERGB (max (0, min (0xff, delta + GetRValue (*color))), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3651 max (0, min (0xff, delta + GetGValue (*color))), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3652 max (0, min (0xff, delta + GetBValue (*color)))); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3653 |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3654 /* TODO: Map to palette and retry with delta if same? */ |
|
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3655 /* TODO: Free colors (if using palette)? */ |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
3656 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3657 if (new == *color) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3658 return 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3659 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3660 *color = new; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3661 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3662 return 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3663 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3664 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3665 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3666 /* Set up the foreground color for drawing relief lines of glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3667 string S. RELIEF is a pointer to a struct relief containing the GC |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3668 with which lines will be drawn. Use a color that is FACTOR or |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3669 DELTA lighter or darker than the relief's background which is found |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3670 in S->f->output_data.x->relief_background. If such a color cannot |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3671 be allocated, use DEFAULT_PIXEL, instead. */ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3672 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3673 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3674 w32_setup_relief_color (f, relief, factor, delta, default_pixel) |
| 13434 | 3675 struct frame *f; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3676 struct relief *relief; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3677 double factor; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3678 int delta; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3679 COLORREF default_pixel; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3680 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3681 XGCValues xgcv; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3682 struct w32_output *di = f->output_data.w32; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3683 unsigned long mask = GCForeground; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3684 COLORREF pixel; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3685 COLORREF background = di->relief_background; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3686 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3687 |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3688 /* TODO: Free colors (if using palette)? */ |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
3689 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3690 /* Allocate new color. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3691 xgcv.foreground = default_pixel; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3692 pixel = background; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3693 if (w32_alloc_lighter_color (f, &pixel, factor, delta)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3694 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3695 relief->allocated_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3696 xgcv.foreground = relief->pixel = pixel; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3697 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3698 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3699 if (relief->gc == 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3700 { |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
3701 #if 0 /* TODO: stipple */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3702 xgcv.stipple = dpyinfo->gray; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3703 mask |= GCStipple; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3704 #endif |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3705 relief->gc = XCreateGC (NULL, FRAME_W32_WINDOW (f), mask, &xgcv); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3706 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3707 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3708 XChangeGC (NULL, relief->gc, mask, &xgcv); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3709 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3710 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3711 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3712 /* Set up colors for the relief lines around glyph string S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3713 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3714 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3715 x_setup_relief_colors (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3716 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3717 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3718 struct w32_output *di = s->f->output_data.w32; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3719 COLORREF color; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3720 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3721 if (s->face->use_box_color_for_shadows_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3722 color = s->face->box_color; |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
3723 else if (s->first_glyph->type == IMAGE_GLYPH |
|
42538
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
3724 && s->img->pixmap |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
3725 && !IMAGE_BACKGROUND_TRANSPARENT (s->img, s->f, 0)) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
3726 color = IMAGE_BACKGROUND (s->img, s->f, 0); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3727 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3728 color = s->gc->background; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3729 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3730 if (di->white_relief.gc == 0 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3731 || color != di->relief_background) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3732 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3733 di->relief_background = color; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3734 w32_setup_relief_color (s->f, &di->white_relief, 1.2, 0x8000, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3735 WHITE_PIX_DEFAULT (s->f)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3736 w32_setup_relief_color (s->f, &di->black_relief, 0.6, 0x4000, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3737 BLACK_PIX_DEFAULT (s->f)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3738 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3739 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3740 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3741 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3742 /* Draw a relief on frame F inside the rectangle given by LEFT_X, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3743 TOP_Y, RIGHT_X, and BOTTOM_Y. WIDTH is the thickness of the relief |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3744 to draw, it must be >= 0. RAISED_P non-zero means draw a raised |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3745 relief. LEFT_P non-zero means draw a relief on the left side of |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3746 the rectangle. RIGHT_P non-zero means draw a relief on the right |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3747 side of the rectangle. CLIP_RECT is the clipping rectangle to use |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3748 when drawing. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3749 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3750 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3751 w32_draw_relief_rect (f, left_x, top_y, right_x, bottom_y, width, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3752 raised_p, left_p, right_p, clip_rect) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3753 struct frame *f; |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
3754 int left_x, top_y, right_x, bottom_y, width, left_p, right_p, raised_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3755 RECT *clip_rect; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3756 { |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
3757 int i; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3758 XGCValues gc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3759 HDC hdc = get_frame_dc (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3760 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3761 if (raised_p) |
|
33524
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3762 gc.foreground = f->output_data.w32->white_relief.gc->foreground; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3763 else |
|
33524
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3764 gc.foreground = f->output_data.w32->black_relief.gc->foreground; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3765 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3766 w32_set_clip_rectangle (hdc, clip_rect); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3767 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3768 /* Top. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3769 for (i = 0; i < width; ++i) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3770 w32_fill_area (f, hdc, gc.foreground, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3771 left_x + i * left_p, top_y + i, |
|
44238
ed87203c48f5
(w32_draw_relief_rect): Fix calculations of line lengths.
Jason Rumney <jasonr@gnu.org>
parents:
44108
diff
changeset
|
3772 right_x - left_x - i * (left_p + right_p ) + 1, 1); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3773 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3774 /* Left. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3775 if (left_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3776 for (i = 0; i < width; ++i) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3777 w32_fill_area (f, hdc, gc.foreground, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3778 left_x + i, top_y + i, 1, |
|
44238
ed87203c48f5
(w32_draw_relief_rect): Fix calculations of line lengths.
Jason Rumney <jasonr@gnu.org>
parents:
44108
diff
changeset
|
3779 bottom_y - top_y - 2 * i + 1); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3780 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3781 if (raised_p) |
|
33524
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3782 gc.foreground = f->output_data.w32->black_relief.gc->foreground; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3783 else |
|
33524
cf8e03cd4985
(HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New constant.
Jason Rumney <jasonr@gnu.org>
parents:
33386
diff
changeset
|
3784 gc.foreground = f->output_data.w32->white_relief.gc->foreground; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3785 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3786 /* Bottom. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3787 for (i = 0; i < width; ++i) |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3788 w32_fill_area (f, hdc, gc.foreground, |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3789 left_x + i * left_p, bottom_y - i, |
|
44238
ed87203c48f5
(w32_draw_relief_rect): Fix calculations of line lengths.
Jason Rumney <jasonr@gnu.org>
parents:
44108
diff
changeset
|
3790 right_x - left_x - i * (left_p + right_p) + 1, 1); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3791 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3792 /* Right. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3793 if (right_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3794 for (i = 0; i < width; ++i) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3795 w32_fill_area (f, hdc, gc.foreground, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3796 right_x - i, top_y + i + 1, 1, |
|
44238
ed87203c48f5
(w32_draw_relief_rect): Fix calculations of line lengths.
Jason Rumney <jasonr@gnu.org>
parents:
44108
diff
changeset
|
3797 bottom_y - top_y - 2 * i - 1); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3798 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3799 w32_set_clip_rectangle (hdc, NULL); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3800 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3801 release_frame_dc (f, hdc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3802 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3803 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3804 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3805 /* Draw a box on frame F inside the rectangle given by LEFT_X, TOP_Y, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3806 RIGHT_X, and BOTTOM_Y. WIDTH is the thickness of the lines to |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3807 draw, it must be >= 0. LEFT_P non-zero means draw a line on the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3808 left side of the rectangle. RIGHT_P non-zero means draw a line |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3809 on the right side of the rectangle. CLIP_RECT is the clipping |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3810 rectangle to use when drawing. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3811 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3812 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3813 w32_draw_box_rect (s, left_x, top_y, right_x, bottom_y, width, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3814 left_p, right_p, clip_rect) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3815 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3816 int left_x, top_y, right_x, bottom_y, width, left_p, right_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3817 RECT *clip_rect; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3818 { |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
3819 w32_set_clip_rectangle (s->hdc, clip_rect); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3820 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3821 /* Top. */ |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
3822 w32_fill_area (s->f, s->hdc, s->face->box_color, |
|
32670
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
3823 left_x, top_y, right_x - left_x + 1, width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3824 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3825 /* Left. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3826 if (left_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3827 { |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
3828 w32_fill_area (s->f, s->hdc, s->face->box_color, |
|
32670
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
3829 left_x, top_y, width, bottom_y - top_y + 1); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3830 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3831 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3832 /* Bottom. */ |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
3833 w32_fill_area (s->f, s->hdc, s->face->box_color, |
|
32670
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
3834 left_x, bottom_y - width + 1, right_x - left_x + 1, width); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3835 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3836 /* Right. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3837 if (right_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3838 { |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
3839 w32_fill_area (s->f, s->hdc, s->face->box_color, |
|
32670
342abe2141e8
(x_produce_glyphs): Handle unibyte_display_via_language_environment correctly.
Jason Rumney <jasonr@gnu.org>
parents:
32022
diff
changeset
|
3840 right_x - width + 1, top_y, width, bottom_y - top_y + 1); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3841 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3842 |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
3843 w32_set_clip_rectangle (s->hdc, NULL); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3844 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3845 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3846 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3847 /* Draw a box around glyph string S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3848 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3849 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3850 x_draw_glyph_string_box (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3851 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3852 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3853 int width, left_x, right_x, top_y, bottom_y, last_x, raised_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3854 int left_p, right_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3855 struct glyph *last_glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3856 RECT clip_rect; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3857 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3858 last_x = window_box_right (s->w, s->area); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3859 if (s->row->full_width_p |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3860 && !s->w->pseudo_window_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3861 { |
| 41125 | 3862 last_x += FRAME_X_RIGHT_FRINGE_WIDTH (s->f); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3863 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (s->f)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3864 last_x += FRAME_SCROLL_BAR_WIDTH (s->f) * CANON_X_UNIT (s->f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3865 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3866 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3867 /* The glyph that may have a right box line. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3868 last_glyph = (s->cmp || s->img |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3869 ? s->first_glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3870 : s->first_glyph + s->nchars - 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3871 |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
3872 width = abs (s->face->box_line_width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3873 raised_p = s->face->box == FACE_RAISED_BOX; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3874 left_x = s->x; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
3875 right_x = ((s->row->full_width_p && s->extends_to_end_of_line_p |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3876 ? last_x - 1 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3877 : min (last_x, s->x + s->background_width) - 1)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3878 top_y = s->y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3879 bottom_y = top_y + s->height - 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3880 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3881 left_p = (s->first_glyph->left_box_line_p |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3882 || (s->hl == DRAW_MOUSE_FACE |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3883 && (s->prev == NULL |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3884 || s->prev->hl != s->hl))); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3885 right_p = (last_glyph->right_box_line_p |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3886 || (s->hl == DRAW_MOUSE_FACE |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3887 && (s->next == NULL |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3888 || s->next->hl != s->hl))); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
3889 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3890 w32_get_glyph_string_clip_rect (s, &clip_rect); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3891 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3892 if (s->face->box == FACE_SIMPLE_BOX) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3893 w32_draw_box_rect (s, left_x, top_y, right_x, bottom_y, width, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3894 left_p, right_p, &clip_rect); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3895 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3896 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3897 x_setup_relief_colors (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3898 w32_draw_relief_rect (s->f, left_x, top_y, right_x, bottom_y, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3899 width, raised_p, left_p, right_p, &clip_rect); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3900 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3901 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3902 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3903 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3904 /* Draw foreground of image glyph string S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3905 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3906 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3907 x_draw_image_foreground (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3908 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3909 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3910 int x; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
3911 int y = s->ybase - image_ascent (s->img, s->face); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3912 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3913 /* If first glyph of S has a left box line, start drawing it to the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3914 right of that line. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3915 if (s->face->box != FACE_NO_BOX |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3916 && s->first_glyph->left_box_line_p) |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
3917 x = s->x + abs (s->face->box_line_width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3918 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3919 x = s->x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3920 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3921 /* If there is a margin around the image, adjust x- and y-position |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3922 by that margin. */ |
|
35287
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
3923 x += s->img->hmargin; |
|
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
3924 y += s->img->vmargin; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3925 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3926 SaveDC (s->hdc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3927 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3928 if (s->img->pixmap) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3929 { |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3930 HDC compat_hdc = CreateCompatibleDC (s->hdc); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3931 HBRUSH fg_brush = CreateSolidBrush (s->gc->foreground); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3932 HBRUSH orig_brush = SelectObject (s->hdc, fg_brush); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3933 HGDIOBJ orig_obj = SelectObject (compat_hdc, s->img->pixmap); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3934 SetBkColor (compat_hdc, RGB (255, 255, 255)); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3935 SetTextColor (s->hdc, RGB (0, 0, 0)); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3936 x_set_glyph_string_clipping (s); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3937 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3938 if (s->img->mask) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3939 { |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3940 HDC mask_dc = CreateCompatibleDC (s->hdc); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3941 HGDIOBJ mask_orig_obj = SelectObject (mask_dc, s->img->mask); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3942 |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3943 SetTextColor (s->hdc, RGB (255, 255, 255)); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3944 SetBkColor (s->hdc, RGB (0, 0, 0)); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3945 |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3946 BitBlt (s->hdc, x, y, s->img->width, s->img->height, |
| 48352 | 3947 compat_hdc, 0, 0, SRCINVERT); |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3948 BitBlt (s->hdc, x, y, s->img->width, s->img->height, |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3949 mask_dc, 0, 0, SRCAND); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3950 BitBlt (s->hdc, x, y, s->img->width, s->img->height, |
| 48352 | 3951 compat_hdc, 0, 0, SRCINVERT); |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3952 |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3953 SelectObject (mask_dc, mask_orig_obj); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3954 DeleteDC (mask_dc); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3955 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3956 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3957 { |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3958 SetTextColor (s->hdc, s->gc->foreground); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3959 SetBkColor (s->hdc, s->gc->background); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3960 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3961 BitBlt (s->hdc, x, y, s->img->width, s->img->height, |
| 48352 | 3962 compat_hdc, 0, 0, SRCCOPY); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3963 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3964 /* When the image has a mask, we can expect that at |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3965 least part of a mouse highlight or a block cursor will |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3966 be visible. If the image doesn't have a mask, make |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3967 a block cursor visible by drawing a rectangle around |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3968 the image. I believe it's looking better if we do |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3969 nothing here for mouse-face. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3970 if (s->hl == DRAW_CURSOR) |
|
45196
fb8359237a78
(x_draw_image_foreground, w32_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents:
44641
diff
changeset
|
3971 { |
|
fb8359237a78
(x_draw_image_foreground, w32_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents:
44641
diff
changeset
|
3972 int r = s->img->relief; |
|
fb8359237a78
(x_draw_image_foreground, w32_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents:
44641
diff
changeset
|
3973 if (r < 0) r = -r; |
|
fb8359237a78
(x_draw_image_foreground, w32_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents:
44641
diff
changeset
|
3974 w32_draw_rectangle (s->hdc, s->gc, x - r, y - r , |
|
fb8359237a78
(x_draw_image_foreground, w32_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents:
44641
diff
changeset
|
3975 s->img->width + r*2 - 1, s->img->height + r*2 - 1); |
|
fb8359237a78
(x_draw_image_foreground, w32_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents:
44641
diff
changeset
|
3976 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3977 } |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3978 |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3979 w32_set_clip_rectangle (s->hdc, NULL); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3980 SelectObject (s->hdc, orig_brush); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3981 DeleteObject (fg_brush); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3982 SelectObject (compat_hdc, orig_obj); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
3983 DeleteDC (compat_hdc); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3984 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3985 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3986 w32_draw_rectangle (s->hdc, s->gc, x, y, s->img->width -1, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3987 s->img->height - 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3988 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3989 RestoreDC (s->hdc ,-1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3990 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3991 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3992 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3993 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3994 /* Draw a relief around the image glyph string S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3995 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3996 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3997 x_draw_image_relief (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3998 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
3999 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4000 int x0, y0, x1, y1, thick, raised_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4001 RECT r; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4002 int x; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
4003 int y = s->ybase - image_ascent (s->img, s->face); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4004 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4005 /* If first glyph of S has a left box line, start drawing it to the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4006 right of that line. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4007 if (s->face->box != FACE_NO_BOX |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4008 && s->first_glyph->left_box_line_p) |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
4009 x = s->x + abs (s->face->box_line_width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4010 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4011 x = s->x; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4012 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4013 /* If there is a margin around the image, adjust x- and y-position |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4014 by that margin. */ |
|
35287
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
4015 x += s->img->hmargin; |
|
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
4016 y += s->img->vmargin; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4017 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4018 if (s->hl == DRAW_IMAGE_SUNKEN |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4019 || s->hl == DRAW_IMAGE_RAISED) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4020 { |
|
42538
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
4021 thick = tool_bar_button_relief >= 0 ? tool_bar_button_relief : DEFAULT_TOOL_BAR_BUTTON_RELIEF; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4022 raised_p = s->hl == DRAW_IMAGE_RAISED; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4023 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4024 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4025 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4026 thick = abs (s->img->relief); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4027 raised_p = s->img->relief > 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4028 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4029 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4030 x0 = x - thick; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4031 y0 = y - thick; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4032 x1 = x + s->img->width + thick - 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4033 y1 = y + s->img->height + thick - 1; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4034 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4035 x_setup_relief_colors (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4036 w32_get_glyph_string_clip_rect (s, &r); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4037 w32_draw_relief_rect (s->f, x0, y0, x1, y1, thick, raised_p, 1, 1, &r); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4038 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4039 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4040 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4041 /* Draw the foreground of image glyph string S to PIXMAP. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4042 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4043 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4044 w32_draw_image_foreground_1 (s, pixmap) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4045 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4046 HBITMAP pixmap; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4047 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4048 HDC hdc = CreateCompatibleDC (s->hdc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4049 HGDIOBJ orig_hdc_obj = SelectObject (hdc, pixmap); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4050 int x; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
4051 int y = s->ybase - s->y - image_ascent (s->img, s->face); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4052 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4053 /* If first glyph of S has a left box line, start drawing it to the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4054 right of that line. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4055 if (s->face->box != FACE_NO_BOX |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4056 && s->first_glyph->left_box_line_p) |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
4057 x = abs (s->face->box_line_width); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4058 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4059 x = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4060 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4061 /* If there is a margin around the image, adjust x- and y-position |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4062 by that margin. */ |
|
35287
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
4063 x += s->img->hmargin; |
|
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
4064 y += s->img->vmargin; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4065 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4066 if (s->img->pixmap) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4067 { |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4068 HDC compat_hdc = CreateCompatibleDC (hdc); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4069 HBRUSH fg_brush = CreateSolidBrush (s->gc->foreground); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4070 HBRUSH orig_brush = SelectObject (hdc, fg_brush); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4071 HGDIOBJ orig_obj = SelectObject (compat_hdc, s->img->pixmap); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4072 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4073 if (s->img->mask) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4074 { |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4075 HDC mask_dc = CreateCompatibleDC (hdc); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4076 HGDIOBJ mask_orig_obj = SelectObject (mask_dc, s->img->mask); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4077 |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4078 SetTextColor (hdc, RGB (0, 0, 0)); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4079 SetBkColor (hdc, RGB (255, 255, 255)); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4080 BitBlt (hdc, x, y, s->img->width, s->img->height, |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4081 compat_hdc, 0, 0, SRCINVERT); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4082 BitBlt (hdc, x, y, s->img->width, s->img->height, |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4083 mask_dc, 0, 0, SRCAND); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4084 BitBlt (hdc, x, y, s->img->width, s->img->height, |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4085 compat_hdc, 0, 0, SRCINVERT); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4086 |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4087 SelectObject (mask_dc, mask_orig_obj); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4088 DeleteDC (mask_dc); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4089 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4090 else |
| 13434 | 4091 { |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4092 SetTextColor (hdc, s->gc->foreground); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4093 SetBkColor (hdc, s->gc->background); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4094 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4095 BitBlt (hdc, x, y, s->img->width, s->img->height, |
| 48352 | 4096 compat_hdc, 0, 0, SRCCOPY); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4097 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4098 /* When the image has a mask, we can expect that at |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4099 least part of a mouse highlight or a block cursor will |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4100 be visible. If the image doesn't have a mask, make |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4101 a block cursor visible by drawing a rectangle around |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4102 the image. I believe it's looking better if we do |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4103 nothing here for mouse-face. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4104 if (s->hl == DRAW_CURSOR) |
|
45196
fb8359237a78
(x_draw_image_foreground, w32_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents:
44641
diff
changeset
|
4105 { |
|
fb8359237a78
(x_draw_image_foreground, w32_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents:
44641
diff
changeset
|
4106 int r = s->img->relief; |
|
fb8359237a78
(x_draw_image_foreground, w32_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents:
44641
diff
changeset
|
4107 if (r < 0) r = -r; |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4108 w32_draw_rectangle (hdc, s->gc, x - r, y - r , |
|
45196
fb8359237a78
(x_draw_image_foreground, w32_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents:
44641
diff
changeset
|
4109 s->img->width + r*2 - 1, s->img->height + r*2 - 1); |
|
fb8359237a78
(x_draw_image_foreground, w32_draw_image_foreground_1):
Kim F. Storm <storm@cua.dk>
parents:
44641
diff
changeset
|
4110 } |
| 13434 | 4111 } |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4112 |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4113 SelectObject (hdc, orig_brush); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4114 DeleteObject (fg_brush); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4115 SelectObject (compat_hdc, orig_obj); |
|
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4116 DeleteDC (compat_hdc); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4117 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4118 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4119 w32_draw_rectangle (hdc, s->gc, x, y, s->img->width - 1, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4120 s->img->height - 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4121 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4122 SelectObject (hdc, orig_hdc_obj); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4123 DeleteDC (hdc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4124 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4125 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4126 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4127 /* Draw part of the background of glyph string S. X, Y, W, and H |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4128 give the rectangle to draw. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4129 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4130 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4131 x_draw_glyph_string_bg_rect (s, x, y, w, h) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4132 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4133 int x, y, w, h; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4134 { |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
4135 #if 0 /* TODO: stipple */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4136 if (s->stippled_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4137 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4138 /* Fill background with a stipple pattern. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4139 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4140 XFillRectangle (s->display, s->window, s->gc, x, y, w, h); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4141 XSetFillStyle (s->display, s->gc, FillSolid); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4142 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4143 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4144 #endif |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4145 x_clear_glyph_string_rect (s, x, y, w, h); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4146 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4147 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4148 |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4149 /* Draw image glyph string S. |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4150 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4151 s->y |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4152 s->x +------------------------- |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4153 | s->face->box |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4154 | |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4155 | +------------------------- |
|
35287
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
4156 | | s->img->vmargin |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4157 | | |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4158 | | +------------------- |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4159 | | | the image |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4160 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4161 */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4162 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4163 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4164 x_draw_image_glyph_string (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4165 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4166 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4167 int x, y; |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
4168 int box_line_hwidth = abs (s->face->box_line_width); |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
4169 int box_line_vwidth = max (s->face->box_line_width, 0); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4170 int height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4171 HBITMAP pixmap = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4172 |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
4173 height = s->height - 2 * box_line_vwidth; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4174 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4175 /* Fill background with face under the image. Do it only if row is |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4176 taller than image or if image has a clip mask to reduce |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4177 flickering. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4178 s->stippled_p = s->face->stipple != 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4179 if (height > s->img->height |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
4180 || s->img->hmargin |
|
35287
28e0cac22fbd
(x_produce_image_glyph, x_draw_image_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
35000
diff
changeset
|
4181 || s->img->vmargin |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4182 || s->img->mask |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4183 || s->img->pixmap == 0 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4184 || s->width != s->background_width) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4185 { |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
4186 if (box_line_hwidth && s->first_glyph->left_box_line_p) |
|
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
4187 x = s->x + box_line_hwidth; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4188 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4189 x = s->x; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4190 |
|
36045
8be6a1c85409
(x_produce_image_glyph): Pay attention to the case that
Andrew Innes <andrewi@gnu.org>
parents:
36002
diff
changeset
|
4191 y = s->y + box_line_vwidth; |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4192 #if 0 /* TODO: figure out if we need to do this on Windows. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4193 if (s->img->mask) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4194 { |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
4195 /* Create a pixmap as large as the glyph string. Fill it |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
4196 with the background color. Copy the image to it, using |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
4197 its mask. Copy the temporary pixmap to the display. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4198 Screen *screen = FRAME_X_SCREEN (s->f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4199 int depth = DefaultDepthOfScreen (screen); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4200 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4201 /* Create a pixmap as large as the glyph string. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4202 pixmap = XCreatePixmap (s->display, s->window, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4203 s->background_width, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4204 s->height, depth); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4205 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4206 /* Don't clip in the following because we're working on the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4207 pixmap. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4208 XSetClipMask (s->display, s->gc, None); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4209 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4210 /* Fill the pixmap with the background color/stipple. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4211 if (s->stippled_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4212 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4213 /* Fill background with a stipple pattern. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4214 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4215 XFillRectangle (s->display, pixmap, s->gc, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4216 0, 0, s->background_width, s->height); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4217 XSetFillStyle (s->display, s->gc, FillSolid); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4218 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4219 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4220 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4221 XGCValues xgcv; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4222 XGetGCValues (s->display, s->gc, GCForeground | GCBackground, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4223 &xgcv); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4224 XSetForeground (s->display, s->gc, xgcv.background); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4225 XFillRectangle (s->display, pixmap, s->gc, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4226 0, 0, s->background_width, s->height); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4227 XSetForeground (s->display, s->gc, xgcv.foreground); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4228 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4229 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4230 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4231 #endif |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4232 x_draw_glyph_string_bg_rect (s, x, y, s->background_width, height); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4233 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4234 s->background_filled_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4235 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4236 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4237 /* Draw the foreground. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4238 if (pixmap != 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4239 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4240 w32_draw_image_foreground_1 (s, pixmap); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4241 x_set_glyph_string_clipping (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4242 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4243 HDC compat_hdc = CreateCompatibleDC (s->hdc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4244 HBRUSH fg_brush = CreateSolidBrush (s->gc->foreground); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4245 HBRUSH orig_brush = SelectObject (s->hdc, fg_brush); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4246 HGDIOBJ orig_obj = SelectObject (compat_hdc, pixmap); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4247 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4248 SetTextColor (s->hdc, s->gc->foreground); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4249 SetBkColor (s->hdc, s->gc->background); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4250 BitBlt (s->hdc, s->x, s->y, s->background_width, s->height, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4251 compat_hdc, 0, 0, SRCCOPY); |
|
48345
44c0f878e8b9
(x_draw_image_foreground, x_draw_image_glyph_string)
Jason Rumney <jasonr@gnu.org>
parents:
48218
diff
changeset
|
4252 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4253 SelectObject (s->hdc, orig_brush); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4254 DeleteObject (fg_brush); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4255 SelectObject (compat_hdc, orig_obj); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4256 DeleteDC (compat_hdc); |
| 13434 | 4257 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4258 DeleteObject (pixmap); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4259 pixmap = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4260 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4261 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4262 x_draw_image_foreground (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4263 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4264 /* If we must draw a relief around the image, do it. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4265 if (s->img->relief |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4266 || s->hl == DRAW_IMAGE_RAISED |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4267 || s->hl == DRAW_IMAGE_SUNKEN) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4268 x_draw_image_relief (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4269 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4270 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4271 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4272 /* Draw stretch glyph string S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4273 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4274 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4275 x_draw_stretch_glyph_string (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4276 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4277 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4278 xassert (s->first_glyph->type == STRETCH_GLYPH); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4279 s->stippled_p = s->face->stipple != 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4280 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4281 if (s->hl == DRAW_CURSOR |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4282 && !x_stretch_cursor_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4283 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4284 /* If `x-stretch-block-cursor' is nil, don't draw a block cursor |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4285 as wide as the stretch glyph. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4286 int width = min (CANON_X_UNIT (s->f), s->background_width); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4287 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4288 /* Draw cursor. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4289 x_draw_glyph_string_bg_rect (s, s->x, s->y, width, s->height); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4290 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4291 /* Clear rest using the GC of the original non-cursor face. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4292 if (width < s->background_width) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4293 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4294 XGCValues *gc = s->face->gc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4295 int x = s->x + width, y = s->y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4296 int w = s->background_width - width, h = s->height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4297 RECT r; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4298 HDC hdc = s->hdc; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4299 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4300 if (s->row->mouse_face_p |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4301 && cursor_in_mouse_face_p (s->w)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4302 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4303 x_set_mouse_face_gc (s); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4304 gc = s->gc; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4305 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4306 else |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4307 gc = s->face->gc; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4308 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4309 w32_get_glyph_string_clip_rect (s, &r); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4310 w32_set_clip_rectangle (hdc, &r); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4311 |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
4312 #if 0 /* TODO: stipple */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4313 if (s->face->stipple) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4314 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4315 /* Fill background with a stipple pattern. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4316 XSetFillStyle (s->display, gc, FillOpaqueStippled); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4317 XFillRectangle (s->display, s->window, gc, x, y, w, h); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4318 XSetFillStyle (s->display, gc, FillSolid); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4319 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4320 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4321 #endif |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4322 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4323 w32_fill_area (s->f, s->hdc, gc->background, x, y, w, h); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4324 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4325 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4326 } |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4327 else if (!s->background_filled_p) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4328 x_draw_glyph_string_bg_rect (s, s->x, s->y, s->background_width, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4329 s->height); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4330 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4331 s->background_filled_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4332 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4333 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4334 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4335 /* Draw glyph string S. */ |
| 13434 | 4336 |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
4337 static void |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4338 x_draw_glyph_string (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4339 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4340 { |
|
38807
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4341 int relief_drawn_p = 0; |
|
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4342 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4343 /* If S draws into the background of its successor, draw the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4344 background of the successor first so that S can draw into it. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4345 This makes S->next use XDrawString instead of XDrawImageString. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4346 if (s->next && s->right_overhang && !s->for_overlaps_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4347 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4348 xassert (s->next->img == NULL); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4349 x_set_glyph_string_gc (s->next); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4350 x_set_glyph_string_clipping (s->next); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4351 x_draw_glyph_string_background (s->next, 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4352 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4353 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4354 /* Set up S->gc, set clipping and draw S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4355 x_set_glyph_string_gc (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4356 |
|
38807
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4357 /* Draw relief (if any) in advance for char/composition so that the |
|
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4358 glyph string can be drawn over it. */ |
|
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4359 if (!s->for_overlaps_p |
|
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4360 && s->face->box != FACE_NO_BOX |
|
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4361 && (s->first_glyph->type == CHAR_GLYPH |
|
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4362 || s->first_glyph->type == COMPOSITE_GLYPH)) |
|
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4363 |
|
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4364 { |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4365 x_set_glyph_string_clipping (s); |
|
38807
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4366 x_draw_glyph_string_background (s, 1); |
|
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4367 x_draw_glyph_string_box (s); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4368 x_set_glyph_string_clipping (s); |
|
38807
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4369 relief_drawn_p = 1; |
|
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4370 } |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4371 else |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4372 x_set_glyph_string_clipping (s); |
|
38807
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4373 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4374 switch (s->first_glyph->type) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4375 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4376 case IMAGE_GLYPH: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4377 x_draw_image_glyph_string (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4378 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4379 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4380 case STRETCH_GLYPH: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4381 x_draw_stretch_glyph_string (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4382 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4383 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4384 case CHAR_GLYPH: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4385 if (s->for_overlaps_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4386 s->background_filled_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4387 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4388 x_draw_glyph_string_background (s, 0); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4389 x_draw_glyph_string_foreground (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4390 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4391 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4392 case COMPOSITE_GLYPH: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4393 if (s->for_overlaps_p || s->gidx > 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4394 s->background_filled_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4395 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4396 x_draw_glyph_string_background (s, 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4397 x_draw_composite_glyph_string_foreground (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4398 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4399 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4400 default: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4401 abort (); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4402 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4403 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4404 if (!s->for_overlaps_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4405 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4406 /* Draw underline. */ |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
4407 if (s->face->underline_p |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
4408 && (s->font->bdf || !s->font->tm.tmUnderlined)) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4409 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4410 unsigned long h = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4411 unsigned long dy = s->height - h; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4412 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4413 /* TODO: Use font information for positioning and thickness |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4414 of underline. See OUTLINETEXTMETRIC, and xterm.c. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4415 if (s->face->underline_defaulted_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4416 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4417 w32_fill_area (s->f, s->hdc, s->gc->foreground, s->x, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4418 s->y + dy, s->width, 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4419 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4420 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4421 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4422 w32_fill_area (s->f, s->hdc, s->face->underline_color, s->x, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4423 s->y + dy, s->width, 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4424 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4425 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4426 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4427 /* Draw overline. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4428 if (s->face->overline_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4429 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4430 unsigned long dy = 0, h = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4431 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4432 if (s->face->overline_color_defaulted_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4433 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4434 w32_fill_area (s->f, s->hdc, s->gc->foreground, s->x, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4435 s->y + dy, s->width, h); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4436 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4437 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4438 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4439 w32_fill_area (s->f, s->hdc, s->face->underline_color, s->x, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4440 s->y + dy, s->width, h); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4441 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4442 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4443 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4444 /* Draw strike-through. */ |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
4445 if (s->face->strike_through_p |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
4446 && (s->font->bdf || !s->font->tm.tmStruckOut)) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4447 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4448 unsigned long h = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4449 unsigned long dy = (s->height - h) / 2; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4450 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4451 if (s->face->strike_through_color_defaulted_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4452 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4453 w32_fill_area (s->f, s->hdc, s->gc->foreground, s->x, s->y + dy, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4454 s->width, h); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4455 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4456 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4457 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4458 w32_fill_area (s->f, s->hdc, s->face->underline_color, s->x, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4459 s->y + dy, s->width, h); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4460 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4461 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4462 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4463 /* Draw relief. */ |
|
38807
a59ac9807c9d
Draw relief (if any) before
Andrew Innes <andrewi@gnu.org>
parents:
38570
diff
changeset
|
4464 if (!relief_drawn_p && s->face->box != FACE_NO_BOX) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4465 x_draw_glyph_string_box (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4466 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4467 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4468 /* Reset clipping. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4469 w32_set_clip_rectangle (s->hdc, NULL); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4470 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4471 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4472 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4473 static int x_fill_composite_glyph_string P_ ((struct glyph_string *, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4474 struct face **, int)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4475 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4476 |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
4477 /* Fill glyph string S with composition components specified by S->cmp. |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4478 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4479 FACES is an array of faces for all components of this composition. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4480 S->gidx is the index of the first component for S. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4481 OVERLAPS_P non-zero means S should draw the foreground only, and |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
4482 use its physical height for clipping. |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4483 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4484 Value is the index of a component not in S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4485 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4486 static int |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4487 x_fill_composite_glyph_string (s, faces, overlaps_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4488 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4489 struct face **faces; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4490 int overlaps_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4491 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4492 int i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4493 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4494 xassert (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4495 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4496 s->for_overlaps_p = overlaps_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4497 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4498 s->face = faces[s->gidx]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4499 s->font = s->face->font; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4500 s->font_info = FONT_INFO_FROM_ID (s->f, s->face->font_info_id); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4501 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4502 /* For all glyphs of this composition, starting at the offset |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4503 S->gidx, until we reach the end of the definition or encounter a |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4504 glyph that requires the different face, add it to S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4505 ++s->nchars; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4506 for (i = s->gidx + 1; i < s->cmp->glyph_len && faces[i] == s->face; ++i) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4507 ++s->nchars; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4508 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4509 /* All glyph strings for the same composition has the same width, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4510 i.e. the width set for the first component of the composition. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4511 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4512 s->width = s->first_glyph->pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4513 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4514 /* If the specified font could not be loaded, use the frame's |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4515 default font, but record the fact that we couldn't load it in |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4516 the glyph string so that we can draw rectangles for the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4517 characters of the glyph string. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4518 if (s->font == NULL) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4519 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4520 s->font_not_found_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4521 s->font = FRAME_FONT (s->f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4522 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4523 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4524 /* Adjust base line for subscript/superscript text. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4525 s->ybase += s->first_glyph->voffset; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4526 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4527 xassert (s->face && s->face->gc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4528 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4529 /* This glyph string must always be drawn with 16-bit functions. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4530 s->two_byte_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4531 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4532 return s->gidx + s->nchars; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4533 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4534 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4535 |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
4536 /* Fill glyph string S from a sequence of character glyphs. |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4537 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4538 FACE_ID is the face id of the string. START is the index of the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4539 first glyph to consider, END is the index of the last + 1. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4540 OVERLAPS_P non-zero means S should draw the foreground only, and |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
4541 use its physical height for clipping. |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4542 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4543 Value is the index of the first glyph not in S. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4544 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4545 static int |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4546 x_fill_glyph_string (s, face_id, start, end, overlaps_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4547 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4548 int face_id; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4549 int start, end, overlaps_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4550 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4551 struct glyph *glyph, *last; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4552 int voffset; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4553 int glyph_not_available_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4554 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4555 xassert (s->f == XFRAME (s->w->frame)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4556 xassert (s->nchars == 0); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4557 xassert (start >= 0 && end > start); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4558 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4559 s->for_overlaps_p = overlaps_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4560 glyph = s->row->glyphs[s->area] + start; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4561 last = s->row->glyphs[s->area] + end; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4562 voffset = glyph->voffset; |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4563 |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4564 glyph_not_available_p = glyph->glyph_not_available_p; |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4565 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4566 while (glyph < last |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4567 && glyph->type == CHAR_GLYPH |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4568 && glyph->voffset == voffset |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4569 /* Same face id implies same font, nowadays. */ |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4570 && glyph->face_id == face_id |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4571 && glyph->glyph_not_available_p == glyph_not_available_p) |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4572 { |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4573 int two_byte_p; |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4574 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4575 s->face = x_get_glyph_face_and_encoding (s->f, glyph, |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4576 s->char2b + s->nchars, |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4577 &two_byte_p); |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4578 s->two_byte_p = two_byte_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4579 ++s->nchars; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4580 xassert (s->nchars <= end - start); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4581 s->width += glyph->pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4582 ++glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4583 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4584 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4585 s->font = s->face->font; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4586 s->font_info = FONT_INFO_FROM_ID (s->f, s->face->font_info_id); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4587 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4588 /* If the specified font could not be loaded, use the frame's font, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4589 but record the fact that we couldn't load it in |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4590 S->font_not_found_p so that we can draw rectangles for the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4591 characters of the glyph string. */ |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4592 if (s->font == NULL || glyph_not_available_p) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4593 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4594 s->font_not_found_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4595 s->font = FRAME_FONT (s->f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4596 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4597 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4598 /* Adjust base line for subscript/superscript text. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4599 s->ybase += voffset; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4600 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4601 xassert (s->face && s->face->gc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4602 return glyph - s->row->glyphs[s->area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4603 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4604 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4605 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4606 /* Fill glyph string S from image glyph S->first_glyph. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4607 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4608 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4609 x_fill_image_glyph_string (s) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4610 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4611 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4612 xassert (s->first_glyph->type == IMAGE_GLYPH); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4613 s->img = IMAGE_FROM_ID (s->f, s->first_glyph->u.img_id); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4614 xassert (s->img); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4615 s->face = FACE_FROM_ID (s->f, s->first_glyph->face_id); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4616 s->font = s->face->font; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4617 s->width = s->first_glyph->pixel_width; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4618 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4619 /* Adjust base line for subscript/superscript text. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4620 s->ybase += s->first_glyph->voffset; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4621 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4622 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4623 |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4624 /* Fill glyph string S from a sequence of stretch glyphs. |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4625 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4626 ROW is the glyph row in which the glyphs are found, AREA is the |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4627 area within the row. START is the index of the first glyph to |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4628 consider, END is the index of the last + 1. |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4629 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4630 Value is the index of the first glyph not in S. */ |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4631 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4632 static int |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4633 x_fill_stretch_glyph_string (s, row, area, start, end) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4634 struct glyph_string *s; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4635 struct glyph_row *row; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4636 enum glyph_row_area area; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4637 int start, end; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4638 { |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4639 struct glyph *glyph, *last; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4640 int voffset, face_id; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4641 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4642 xassert (s->first_glyph->type == STRETCH_GLYPH); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4643 |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4644 glyph = s->row->glyphs[s->area] + start; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4645 last = s->row->glyphs[s->area] + end; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4646 face_id = glyph->face_id; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4647 s->face = FACE_FROM_ID (s->f, face_id); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4648 s->font = s->face->font; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4649 s->font_info = FONT_INFO_FROM_ID (s->f, s->face->font_info_id); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4650 s->width = glyph->pixel_width; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4651 voffset = glyph->voffset; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4652 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4653 for (++glyph; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4654 (glyph < last |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4655 && glyph->type == STRETCH_GLYPH |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4656 && glyph->voffset == voffset |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4657 && glyph->face_id == face_id); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4658 ++glyph) |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4659 s->width += glyph->pixel_width; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4660 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4661 /* Adjust base line for subscript/superscript text. */ |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4662 s->ybase += voffset; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4663 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
4664 xassert (s->face); |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4665 return glyph - s->row->glyphs[s->area]; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4666 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4667 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4668 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4669 /* Initialize glyph string S. CHAR2B is a suitably allocated vector |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4670 of XChar2b structures for S; it can't be allocated in |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4671 x_init_glyph_string because it must be allocated via `alloca'. W |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4672 is the window on which S is drawn. ROW and AREA are the glyph row |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4673 and area within the row from which S is constructed. START is the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4674 index of the first glyph structure covered by S. HL is a |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4675 face-override for drawing S. */ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4676 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4677 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4678 w32_init_glyph_string (s, hdc, char2b, w, row, area, start, hl) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4679 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4680 HDC hdc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4681 wchar_t *char2b; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4682 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4683 struct glyph_row *row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4684 enum glyph_row_area area; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4685 int start; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4686 enum draw_glyphs_face hl; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4687 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4688 bzero (s, sizeof *s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4689 s->w = w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4690 s->f = XFRAME (w->frame); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4691 s->hdc = hdc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4692 s->window = FRAME_W32_WINDOW (s->f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4693 s->char2b = char2b; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4694 s->hl = hl; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4695 s->row = row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4696 s->area = area; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4697 s->first_glyph = row->glyphs[area] + start; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4698 s->height = row->height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4699 s->y = WINDOW_TO_FRAME_PIXEL_Y (w, row->y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4700 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4701 /* Display the internal border below the tool-bar window. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4702 if (s->w == XWINDOW (s->f->tool_bar_window)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4703 s->y -= s->f->output_data.w32->internal_border_width; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4704 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4705 s->ybase = s->y + row->ascent; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4706 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4707 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4708 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4709 /* Set background width of glyph string S. START is the index of the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4710 first glyph following S. LAST_X is the right-most x-position + 1 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4711 in the drawing area. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4712 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4713 static INLINE void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4714 x_set_glyph_string_background_width (s, start, last_x) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4715 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4716 int start; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4717 int last_x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4718 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4719 /* If the face of this glyph string has to be drawn to the end of |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4720 the drawing area, set S->extends_to_end_of_line_p. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4721 struct face *default_face = FACE_FROM_ID (s->f, DEFAULT_FACE_ID); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4722 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4723 if (start == s->row->used[s->area] |
|
36315
b72dddbb65b2
* w32term.c (x_set_glyph_string_background_width): Extend the
Jason Rumney <jasonr@gnu.org>
parents:
36045
diff
changeset
|
4724 && s->area == TEXT_AREA |
|
39002
e008ccec0cad
(x_set_glyph_string_background_width)
Eli Zaretskii <eliz@gnu.org>
parents:
38807
diff
changeset
|
4725 && ((s->hl == DRAW_NORMAL_TEXT |
|
e008ccec0cad
(x_set_glyph_string_background_width)
Eli Zaretskii <eliz@gnu.org>
parents:
38807
diff
changeset
|
4726 && (s->row->fill_line_p |
|
e008ccec0cad
(x_set_glyph_string_background_width)
Eli Zaretskii <eliz@gnu.org>
parents:
38807
diff
changeset
|
4727 || s->face->background != default_face->background |
|
e008ccec0cad
(x_set_glyph_string_background_width)
Eli Zaretskii <eliz@gnu.org>
parents:
38807
diff
changeset
|
4728 || s->face->stipple != default_face->stipple |
|
e008ccec0cad
(x_set_glyph_string_background_width)
Eli Zaretskii <eliz@gnu.org>
parents:
38807
diff
changeset
|
4729 || s->row->mouse_face_p)) |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
4730 || s->hl == DRAW_MOUSE_FACE |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
4731 || ((s->hl == DRAW_IMAGE_RAISED || s->hl == DRAW_IMAGE_SUNKEN) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
4732 && s->row->fill_line_p))) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4733 s->extends_to_end_of_line_p = 1; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4734 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4735 /* If S extends its face to the end of the line, set its |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4736 background_width to the distance to the right edge of the drawing |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4737 area. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4738 if (s->extends_to_end_of_line_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4739 s->background_width = last_x - s->x + 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4740 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4741 s->background_width = s->width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4742 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4743 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4744 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4745 /* Add a glyph string for a stretch glyph to the list of strings |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4746 between HEAD and TAIL. START is the index of the stretch glyph in |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4747 row area AREA of glyph row ROW. END is the index of the last glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4748 in that glyph row area. X is the current output position assigned |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4749 to the new glyph string constructed. HL overrides that face of the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4750 glyph; e.g. it is DRAW_CURSOR if a cursor has to be drawn. LAST_X |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4751 is the right-most x-position of the drawing area. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4752 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4753 #define BUILD_STRETCH_GLYPH_STRING(hdc, W, ROW, AREA, START, END, HEAD, TAIL, HL, X, LAST_X) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4754 do \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4755 { \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4756 s = (struct glyph_string *) alloca (sizeof *s); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4757 w32_init_glyph_string (s, hdc, NULL, W, ROW, AREA, START, HL); \ |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4758 START = x_fill_stretch_glyph_string (s, ROW, AREA, START, END); \ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4759 x_append_glyph_string (&HEAD, &TAIL, s); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4760 s->x = (X); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4761 } \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4762 while (0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4763 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4764 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4765 /* Add a glyph string for an image glyph to the list of strings |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4766 between HEAD and TAIL. START is the index of the image glyph in |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4767 row area AREA of glyph row ROW. END is the index of the last glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4768 in that glyph row area. X is the current output position assigned |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4769 to the new glyph string constructed. HL overrides that face of the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4770 glyph; e.g. it is DRAW_CURSOR if a cursor has to be drawn. LAST_X |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4771 is the right-most x-position of the drawing area. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4772 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4773 #define BUILD_IMAGE_GLYPH_STRING(hdc, W, ROW, AREA, START, END, HEAD, TAIL, HL, X, LAST_X) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4774 do \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4775 { \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4776 s = (struct glyph_string *) alloca (sizeof *s); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4777 w32_init_glyph_string (s, hdc, NULL, W, ROW, AREA, START, HL); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4778 x_fill_image_glyph_string (s); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4779 x_append_glyph_string (&HEAD, &TAIL, s); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4780 ++START; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4781 s->x = (X); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4782 } \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4783 while (0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4784 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4785 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4786 /* Add a glyph string for a sequence of character glyphs to the list |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4787 of strings between HEAD and TAIL. START is the index of the first |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4788 glyph in row area AREA of glyph row ROW that is part of the new |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4789 glyph string. END is the index of the last glyph in that glyph row |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4790 area. X is the current output position assigned to the new glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4791 string constructed. HL overrides that face of the glyph; e.g. it |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4792 is DRAW_CURSOR if a cursor has to be drawn. LAST_X is the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4793 right-most x-position of the drawing area. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4794 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4795 #define BUILD_CHAR_GLYPH_STRINGS(hdc, W, ROW, AREA, START, END, HEAD, TAIL, HL, X, LAST_X, OVERLAPS_P) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4796 do \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4797 { \ |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4798 int c, face_id; \ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4799 wchar_t *char2b; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4800 \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4801 c = (ROW)->glyphs[AREA][START].u.ch; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4802 face_id = (ROW)->glyphs[AREA][START].face_id; \ |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
4803 \ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4804 s = (struct glyph_string *) alloca (sizeof *s); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4805 char2b = (wchar_t *) alloca ((END - START) * sizeof *char2b); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4806 w32_init_glyph_string (s, hdc, char2b, W, ROW, AREA, START, HL); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4807 x_append_glyph_string (&HEAD, &TAIL, s); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4808 s->x = (X); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4809 START = x_fill_glyph_string (s, face_id, START, END, \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4810 OVERLAPS_P); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4811 } \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4812 while (0) |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4813 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4814 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4815 /* Add a glyph string for a composite sequence to the list of strings |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4816 between HEAD and TAIL. START is the index of the first glyph in |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4817 row area AREA of glyph row ROW that is part of the new glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4818 string. END is the index of the last glyph in that glyph row area. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4819 X is the current output position assigned to the new glyph string |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4820 constructed. HL overrides that face of the glyph; e.g. it is |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4821 DRAW_CURSOR if a cursor has to be drawn. LAST_X is the right-most |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4822 x-position of the drawing area. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4823 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4824 #define BUILD_COMPOSITE_GLYPH_STRING(hdc, W, ROW, AREA, START, END, HEAD, TAIL, HL, X, LAST_X, OVERLAPS_P) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4825 do { \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4826 int cmp_id = (ROW)->glyphs[AREA][START].u.cmp_id; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4827 int face_id = (ROW)->glyphs[AREA][START].face_id; \ |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4828 struct face *base_face = FACE_FROM_ID (XFRAME (w->frame), face_id); \ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4829 struct composition *cmp = composition_table[cmp_id]; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4830 int glyph_len = cmp->glyph_len; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4831 wchar_t *char2b; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4832 struct face **faces; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4833 struct glyph_string *first_s = NULL; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4834 int n; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4835 \ |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4836 base_face = base_face->ascii_face; \ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4837 char2b = (wchar_t *) alloca ((sizeof *char2b) * glyph_len); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4838 faces = (struct face **) alloca ((sizeof *faces) * glyph_len); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4839 /* At first, fill in `char2b' and `faces'. */ \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4840 for (n = 0; n < glyph_len; n++) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4841 { \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4842 int c = COMPOSITION_GLYPH (cmp, n); \ |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4843 int this_face_id = FACE_FOR_CHAR (XFRAME (w->frame), base_face, c); \ |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4844 faces[n] = FACE_FROM_ID (XFRAME (w->frame), this_face_id); \ |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4845 x_get_char_face_and_encoding (XFRAME (w->frame), c, \ |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
4846 this_face_id, char2b + n, 1); \ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4847 } \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4848 \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4849 /* Make glyph_strings for each glyph sequence that is drawable by \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4850 the same face, and append them to HEAD/TAIL. */ \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4851 for (n = 0; n < cmp->glyph_len;) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4852 { \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4853 s = (struct glyph_string *) alloca (sizeof *s); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4854 w32_init_glyph_string (s, hdc, char2b + n, W, ROW, AREA, START, HL); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4855 x_append_glyph_string (&(HEAD), &(TAIL), s); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4856 s->cmp = cmp; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4857 s->gidx = n; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4858 s->x = (X); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4859 \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4860 if (n == 0) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4861 first_s = s; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4862 \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4863 n = x_fill_composite_glyph_string (s, faces, OVERLAPS_P); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4864 } \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4865 \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4866 ++START; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4867 s = first_s; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4868 } while (0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4869 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
4870 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4871 /* Build a list of glyph strings between HEAD and TAIL for the glyphs |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4872 of AREA of glyph row ROW on window W between indices START and END. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4873 HL overrides the face for drawing glyph strings, e.g. it is |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4874 DRAW_CURSOR to draw a cursor. X and LAST_X are start and end |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4875 x-positions of the drawing area. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4876 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4877 This is an ugly monster macro construct because we must use alloca |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4878 to allocate glyph strings (because x_draw_glyphs can be called |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4879 asynchronously). */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4880 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4881 #define BUILD_GLYPH_STRINGS(hdc, W, ROW, AREA, START, END, HEAD, TAIL, HL, X, LAST_X, OVERLAPS_P) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4882 do \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4883 { \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4884 HEAD = TAIL = NULL; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4885 while (START < END) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4886 { \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4887 struct glyph *first_glyph = (ROW)->glyphs[AREA] + START; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4888 switch (first_glyph->type) \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4889 { \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4890 case CHAR_GLYPH: \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4891 BUILD_CHAR_GLYPH_STRINGS (hdc, W, ROW, AREA, START, END, \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4892 HEAD, TAIL, HL, X, LAST_X, \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4893 OVERLAPS_P); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4894 break; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4895 \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4896 case COMPOSITE_GLYPH: \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4897 BUILD_COMPOSITE_GLYPH_STRING (hdc, W, ROW, AREA, START, \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4898 END, HEAD, TAIL, HL, X, \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4899 LAST_X, OVERLAPS_P); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4900 break; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4901 \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4902 case STRETCH_GLYPH: \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4903 BUILD_STRETCH_GLYPH_STRING (hdc, W, ROW, AREA, START, END,\ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4904 HEAD, TAIL, HL, X, LAST_X); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4905 break; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4906 \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4907 case IMAGE_GLYPH: \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4908 BUILD_IMAGE_GLYPH_STRING (hdc, W, ROW, AREA, START, END, \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4909 HEAD, TAIL, HL, X, LAST_X); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4910 break; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4911 \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4912 default: \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4913 abort (); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4914 } \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4915 \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4916 x_set_glyph_string_background_width (s, START, LAST_X); \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4917 (X) += s->width; \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4918 } \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4919 } \ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4920 while (0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4921 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4922 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4923 /* Draw glyphs between START and END in AREA of ROW on window W, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4924 starting at x-position X. X is relative to AREA in W. HL is a |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4925 face-override with the following meaning: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4926 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4927 DRAW_NORMAL_TEXT draw normally |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4928 DRAW_CURSOR draw in cursor face |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4929 DRAW_MOUSE_FACE draw in mouse face. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4930 DRAW_INVERSE_VIDEO draw in mode line face |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4931 DRAW_IMAGE_SUNKEN draw an image with a sunken relief around it |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4932 DRAW_IMAGE_RAISED draw an image with a raised relief around it |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4933 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4934 If OVERLAPS_P is non-zero, draw only the foreground of characters |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4935 and clip to the physical height of ROW. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4936 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4937 Value is the x-position reached, relative to AREA of W. */ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
4938 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4939 static int |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
4940 x_draw_glyphs (w, x, row, area, start, end, hl, overlaps_p) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4941 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4942 int x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4943 struct glyph_row *row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4944 enum glyph_row_area area; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4945 int start, end; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4946 enum draw_glyphs_face hl; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4947 int overlaps_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4948 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4949 struct glyph_string *head, *tail; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4950 struct glyph_string *s; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4951 int last_x, area_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4952 int x_reached; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4953 int i, j; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4954 HDC hdc = get_frame_dc (XFRAME (WINDOW_FRAME (w))); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4955 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4956 /* Let's rather be paranoid than getting a SEGV. */ |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
4957 end = min (end, row->used[area]); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4958 start = max (0, start); |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
4959 start = min (end, start); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4960 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4961 /* Translate X to frame coordinates. Set last_x to the right |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4962 end of the drawing area. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4963 if (row->full_width_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4964 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4965 /* X is relative to the left edge of W, without scroll bars |
| 41125 | 4966 or fringes. */ |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
4967 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4968 int window_left_x = WINDOW_LEFT_MARGIN (w) * CANON_X_UNIT (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4969 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4970 x += window_left_x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4971 area_width = XFASTINT (w->width) * CANON_X_UNIT (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4972 last_x = window_left_x + area_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4973 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4974 if (FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4975 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4976 int width = FRAME_SCROLL_BAR_WIDTH (f) * CANON_X_UNIT (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4977 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4978 last_x += width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4979 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4980 x -= width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4981 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4982 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4983 x += FRAME_INTERNAL_BORDER_WIDTH (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4984 last_x -= FRAME_INTERNAL_BORDER_WIDTH (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4985 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4986 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4987 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4988 x = WINDOW_AREA_TO_FRAME_PIXEL_X (w, area, x); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4989 area_width = window_box_width (w, area); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4990 last_x = WINDOW_AREA_TO_FRAME_PIXEL_X (w, area, area_width); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4991 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4992 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4993 /* Build a doubly-linked list of glyph_string structures between |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4994 head and tail from what we have to draw. Note that the macro |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4995 BUILD_GLYPH_STRINGS will modify its start parameter. That's |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4996 the reason we use a separate variable `i'. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4997 i = start; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4998 BUILD_GLYPH_STRINGS (hdc, w, row, area, i, end, head, tail, hl, x, last_x, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
4999 overlaps_p); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5000 if (tail) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5001 x_reached = tail->x + tail->background_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5002 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5003 x_reached = x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5004 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5005 /* If there are any glyphs with lbearing < 0 or rbearing > width in |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5006 the row, redraw some glyphs in front or following the glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5007 strings built above. */ |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
5008 if (head && !overlaps_p && row->contains_overlapping_glyphs_p) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5009 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5010 int dummy_x = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5011 struct glyph_string *h, *t; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5012 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5013 /* Compute overhangs for all glyph strings. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5014 for (s = head; s; s = s->next) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5015 x_compute_glyph_string_overhangs (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5016 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5017 /* Prepend glyph strings for glyphs in front of the first glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5018 string that are overwritten because of the first glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5019 string's left overhang. The background of all strings |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5020 prepended must be drawn because the first glyph string |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5021 draws over it. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5022 i = x_left_overwritten (head); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5023 if (i >= 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5024 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5025 j = i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5026 BUILD_GLYPH_STRINGS (hdc, w, row, area, j, start, h, t, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5027 DRAW_NORMAL_TEXT, dummy_x, last_x, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5028 overlaps_p); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5029 start = i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5030 x_compute_overhangs_and_x (t, head->x, 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5031 x_prepend_glyph_string_lists (&head, &tail, h, t); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5032 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5033 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5034 /* Prepend glyph strings for glyphs in front of the first glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5035 string that overwrite that glyph string because of their |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5036 right overhang. For these strings, only the foreground must |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5037 be drawn, because it draws over the glyph string at `head'. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5038 The background must not be drawn because this would overwrite |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5039 right overhangs of preceding glyphs for which no glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5040 strings exist. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5041 i = x_left_overwriting (head); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5042 if (i >= 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5043 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5044 BUILD_GLYPH_STRINGS (hdc, w, row, area, i, start, h, t, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5045 DRAW_NORMAL_TEXT, dummy_x, last_x, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5046 overlaps_p); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5047 for (s = h; s; s = s->next) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5048 s->background_filled_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5049 x_compute_overhangs_and_x (t, head->x, 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5050 x_prepend_glyph_string_lists (&head, &tail, h, t); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5051 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5052 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5053 /* Append glyphs strings for glyphs following the last glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5054 string tail that are overwritten by tail. The background of |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5055 these strings has to be drawn because tail's foreground draws |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5056 over it. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5057 i = x_right_overwritten (tail); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5058 if (i >= 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5059 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5060 BUILD_GLYPH_STRINGS (hdc, w, row, area, end, i, h, t, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5061 DRAW_NORMAL_TEXT, x, last_x, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5062 overlaps_p); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5063 x_compute_overhangs_and_x (h, tail->x + tail->width, 0); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5064 x_append_glyph_string_lists (&head, &tail, h, t); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5065 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5066 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5067 /* Append glyph strings for glyphs following the last glyph |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5068 string tail that overwrite tail. The foreground of such |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5069 glyphs has to be drawn because it writes into the background |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5070 of tail. The background must not be drawn because it could |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5071 paint over the foreground of following glyphs. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5072 i = x_right_overwriting (tail); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5073 if (i >= 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5074 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5075 BUILD_GLYPH_STRINGS (hdc, w, row, area, end, i, h, t, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5076 DRAW_NORMAL_TEXT, x, last_x, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5077 overlaps_p); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5078 for (s = h; s; s = s->next) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5079 s->background_filled_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5080 x_compute_overhangs_and_x (h, tail->x + tail->width, 0); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5081 x_append_glyph_string_lists (&head, &tail, h, t); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5082 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5083 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5084 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5085 /* Draw all strings. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5086 for (s = head; s; s = s->next) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5087 x_draw_glyph_string (s); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5088 |
|
42544
025e76c82b80
(x_draw_glyphs): Don't call notice_overwritten_cursor
Jason Rumney <jasonr@gnu.org>
parents:
42538
diff
changeset
|
5089 if (area == TEXT_AREA |
|
025e76c82b80
(x_draw_glyphs): Don't call notice_overwritten_cursor
Jason Rumney <jasonr@gnu.org>
parents:
42538
diff
changeset
|
5090 && !row->full_width_p |
|
025e76c82b80
(x_draw_glyphs): Don't call notice_overwritten_cursor
Jason Rumney <jasonr@gnu.org>
parents:
42538
diff
changeset
|
5091 /* When drawing overlapping rows, only the glyph strings' |
|
025e76c82b80
(x_draw_glyphs): Don't call notice_overwritten_cursor
Jason Rumney <jasonr@gnu.org>
parents:
42538
diff
changeset
|
5092 foreground is drawn, which doesn't erase a cursor |
|
025e76c82b80
(x_draw_glyphs): Don't call notice_overwritten_cursor
Jason Rumney <jasonr@gnu.org>
parents:
42538
diff
changeset
|
5093 completely. */ |
|
025e76c82b80
(x_draw_glyphs): Don't call notice_overwritten_cursor
Jason Rumney <jasonr@gnu.org>
parents:
42538
diff
changeset
|
5094 && !overlaps_p) |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5095 { |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5096 int x0 = head ? head->x : x; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5097 int x1 = tail ? tail->x + tail->background_width : x; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5098 |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5099 x0 = FRAME_TO_WINDOW_PIXEL_X (w, x0); |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5100 x1 = FRAME_TO_WINDOW_PIXEL_X (w, x1); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5101 |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5102 if (!row->full_width_p && XFASTINT (w->left_margin_width) != 0) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5103 { |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5104 int left_area_width = window_box_width (w, LEFT_MARGIN_AREA); |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5105 x0 -= left_area_width; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5106 x1 -= left_area_width; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5107 } |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5108 |
|
42538
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
5109 notice_overwritten_cursor (w, area, x0, x1, |
|
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
5110 row->y, MATRIX_ROW_BOTTOM_Y (row)); |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5111 } |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5112 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5113 /* Value is the x-position up to which drawn, relative to AREA of W. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5114 This doesn't include parts drawn because of overhangs. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5115 x_reached = FRAME_TO_WINDOW_PIXEL_X (w, x_reached); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5116 if (!row->full_width_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5117 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5118 if (area > LEFT_MARGIN_AREA) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5119 x_reached -= window_box_width (w, LEFT_MARGIN_AREA); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5120 if (area > TEXT_AREA) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5121 x_reached -= window_box_width (w, TEXT_AREA); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5122 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5123 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5124 release_frame_dc (XFRAME (WINDOW_FRAME (w)), hdc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5125 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5126 return x_reached; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5127 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5128 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5129 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5130 /* Fix the display of area AREA of overlapping row ROW in window W. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5131 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5132 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5133 x_fix_overlapping_area (w, row, area) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5134 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5135 struct glyph_row *row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5136 enum glyph_row_area area; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5137 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5138 int i, x; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5139 |
| 13434 | 5140 BLOCK_INPUT; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5141 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5142 if (area == LEFT_MARGIN_AREA) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5143 x = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5144 else if (area == TEXT_AREA) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5145 x = row->x + window_box_width (w, LEFT_MARGIN_AREA); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5146 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5147 x = (window_box_width (w, LEFT_MARGIN_AREA) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5148 + window_box_width (w, TEXT_AREA)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5149 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5150 for (i = 0; i < row->used[area];) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5151 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5152 if (row->glyphs[area][i].overlaps_vertically_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5153 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5154 int start = i, start_x = x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5155 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5156 do |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5157 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5158 x += row->glyphs[area][i].pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5159 ++i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5160 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5161 while (i < row->used[area] |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5162 && row->glyphs[area][i].overlaps_vertically_p); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5163 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5164 x_draw_glyphs (w, start_x, row, area, start, i, |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5165 DRAW_NORMAL_TEXT, 1); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5166 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5167 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5168 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5169 x += row->glyphs[area][i].pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5170 ++i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5171 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5172 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5173 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5174 UNBLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5175 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5176 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5177 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5178 /* Output LEN glyphs starting at START at the nominal cursor position. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5179 Advance the nominal cursor over the text. The global variable |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5180 updated_window contains the window being updated, updated_row is |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5181 the glyph row being updated, and updated_area is the area of that |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5182 row being updated. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5183 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5184 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5185 x_write_glyphs (start, len) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5186 struct glyph *start; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5187 int len; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5188 { |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5189 int x, hpos; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5190 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5191 xassert (updated_window && updated_row); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5192 BLOCK_INPUT; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5193 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5194 /* Write glyphs. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5195 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5196 hpos = start - updated_row->glyphs[updated_area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5197 x = x_draw_glyphs (updated_window, output_cursor.x, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5198 updated_row, updated_area, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5199 hpos, hpos + len, |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5200 DRAW_NORMAL_TEXT, 0); |
| 13434 | 5201 |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
5202 /* Invalidate old phys cursor if the glyph at its hpos is redrawn. */ |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
5203 if (updated_area == TEXT_AREA |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
5204 && updated_window->phys_cursor_on_p |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
5205 && updated_window->phys_cursor.vpos == output_cursor.vpos |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
5206 && updated_window->phys_cursor.hpos >= hpos |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
5207 && updated_window->phys_cursor.hpos < hpos + len) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
5208 updated_window->phys_cursor_on_p = 0; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
5209 |
| 13434 | 5210 UNBLOCK_INPUT; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5211 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5212 /* Advance the output cursor. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5213 output_cursor.hpos += len; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5214 output_cursor.x = x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5215 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5216 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5217 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5218 /* Insert LEN glyphs from START at the nominal cursor position. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5219 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5220 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5221 x_insert_glyphs (start, len) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5222 struct glyph *start; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5223 register int len; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5224 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5225 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5226 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5227 int line_height, shift_by_width, shifted_region_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5228 struct glyph_row *row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5229 struct glyph *glyph; |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5230 int frame_x, frame_y, hpos; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5231 HDC hdc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5232 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5233 xassert (updated_window && updated_row); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5234 BLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5235 w = updated_window; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5236 f = XFRAME (WINDOW_FRAME (w)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5237 hdc = get_frame_dc (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5238 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5239 /* Get the height of the line we are in. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5240 row = updated_row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5241 line_height = row->height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5242 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5243 /* Get the width of the glyphs to insert. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5244 shift_by_width = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5245 for (glyph = start; glyph < start + len; ++glyph) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5246 shift_by_width += glyph->pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5247 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5248 /* Get the width of the region to shift right. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5249 shifted_region_width = (window_box_width (w, updated_area) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5250 - output_cursor.x |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5251 - shift_by_width); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5252 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5253 /* Shift right. */ |
|
36315
b72dddbb65b2
* w32term.c (x_set_glyph_string_background_width): Extend the
Jason Rumney <jasonr@gnu.org>
parents:
36045
diff
changeset
|
5254 frame_x = window_box_left (w, updated_area) + output_cursor.x; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5255 frame_y = WINDOW_TO_FRAME_PIXEL_Y (w, output_cursor.y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5256 BitBlt (hdc, frame_x + shift_by_width, frame_y, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5257 shifted_region_width, line_height, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5258 hdc, frame_x, frame_y, SRCCOPY); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5259 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5260 /* Write the glyphs. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5261 hpos = start - row->glyphs[updated_area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5262 x_draw_glyphs (w, output_cursor.x, row, updated_area, hpos, hpos + len, |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5263 DRAW_NORMAL_TEXT, 0); |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5264 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5265 /* Advance the output cursor. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5266 output_cursor.hpos += len; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5267 output_cursor.x += shift_by_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5268 release_frame_dc (f, hdc); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5269 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5270 UNBLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5271 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5272 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5273 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5274 /* Delete N glyphs at the nominal cursor position. Not implemented |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5275 for X frames. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5276 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5277 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5278 x_delete_glyphs (n) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5279 register int n; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5280 { |
| 35000 | 5281 struct frame *f; |
| 5282 | |
| 5283 if (updating_frame) | |
| 5284 f = updating_frame; | |
| 5285 else | |
| 5286 f = SELECTED_FRAME (); | |
| 5287 | |
| 5288 if (! FRAME_W32_P (f)) | |
| 5289 return; | |
| 5290 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5291 abort (); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5292 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5293 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5294 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5295 /* Erase the current text line from the nominal cursor position |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5296 (inclusive) to pixel column TO_X (exclusive). The idea is that |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5297 everything from TO_X onward is already erased. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5298 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5299 TO_X is a pixel position relative to updated_area of |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5300 updated_window. TO_X == -1 means clear to the end of this area. */ |
| 13434 | 5301 |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
5302 static void |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5303 x_clear_end_of_line (to_x) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5304 int to_x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5305 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5306 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5307 struct window *w = updated_window; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5308 int max_x, min_y, max_y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5309 int from_x, from_y, to_y; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5310 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5311 xassert (updated_window && updated_row); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5312 f = XFRAME (w->frame); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5313 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5314 if (updated_row->full_width_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5315 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5316 max_x = XFASTINT (w->width) * CANON_X_UNIT (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5317 if (FRAME_HAS_VERTICAL_SCROLL_BARS (f) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5318 && !w->pseudo_window_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5319 max_x += FRAME_SCROLL_BAR_WIDTH (f) * CANON_X_UNIT (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5320 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5321 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5322 max_x = window_box_width (w, updated_area); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5323 max_y = window_text_bottom_y (w); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5324 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5325 /* TO_X == 0 means don't do anything. TO_X < 0 means clear to end |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5326 of window. For TO_X > 0, truncate to end of drawing area. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5327 if (to_x == 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5328 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5329 else if (to_x < 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5330 to_x = max_x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5331 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5332 to_x = min (to_x, max_x); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5333 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5334 to_y = min (max_y, output_cursor.y + updated_row->height); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5335 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5336 /* Notice if the cursor will be cleared by this operation. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5337 if (!updated_row->full_width_p) |
|
42538
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
5338 notice_overwritten_cursor (w, updated_area, |
|
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
5339 output_cursor.x, -1, |
|
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
5340 updated_row->y, |
|
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
5341 MATRIX_ROW_BOTTOM_Y (updated_row)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5342 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5343 from_x = output_cursor.x; |
|
42538
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
5344 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5345 /* Translate to frame coordinates. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5346 if (updated_row->full_width_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5347 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5348 from_x = WINDOW_TO_FRAME_PIXEL_X (w, from_x); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5349 to_x = WINDOW_TO_FRAME_PIXEL_X (w, to_x); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5350 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5351 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5352 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5353 from_x = WINDOW_AREA_TO_FRAME_PIXEL_X (w, updated_area, from_x); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5354 to_x = WINDOW_AREA_TO_FRAME_PIXEL_X (w, updated_area, to_x); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5355 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5356 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5357 min_y = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (w); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5358 from_y = WINDOW_TO_FRAME_PIXEL_Y (w, max (min_y, output_cursor.y)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5359 to_y = WINDOW_TO_FRAME_PIXEL_Y (w, to_y); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5360 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5361 /* Prevent inadvertently clearing to end of the X window. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5362 if (to_x > from_x && to_y > from_y) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5363 { |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
5364 HDC hdc; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5365 BLOCK_INPUT; |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
5366 hdc = get_frame_dc (f); |
|
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
5367 |
|
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
5368 w32_clear_area (f, hdc, from_x, from_y, to_x - from_x, to_y - from_y); |
|
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
5369 release_frame_dc (f, hdc); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5370 UNBLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5371 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5372 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5373 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5374 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5375 /* Clear entire frame. If updating_frame is non-null, clear that |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5376 frame. Otherwise clear the selected frame. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5377 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5378 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5379 x_clear_frame () |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5380 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5381 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5382 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5383 if (updating_frame) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5384 f = updating_frame; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5385 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5386 f = SELECTED_FRAME (); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5387 |
| 35000 | 5388 if (! FRAME_W32_P (f)) |
| 5389 return; | |
| 5390 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5391 /* Clearing the frame will erase any cursor, so mark them all as no |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5392 longer visible. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5393 mark_window_cursors_off (XWINDOW (FRAME_ROOT_WINDOW (f))); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5394 output_cursor.hpos = output_cursor.vpos = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5395 output_cursor.x = -1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5396 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5397 /* We don't set the output cursor here because there will always |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5398 follow an explicit cursor_to. */ |
| 13434 | 5399 BLOCK_INPUT; |
| 5400 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
5401 w32_clear_window (f); |
| 13434 | 5402 |
| 5403 /* We have to clear the scroll bars, too. If we have changed | |
| 5404 colors or something like that, then they should be notified. */ | |
| 5405 x_scroll_bar_clear (f); | |
| 5406 | |
| 5407 UNBLOCK_INPUT; | |
| 5408 } | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5409 |
| 13434 | 5410 |
| 5411 /* Make audible bell. */ | |
| 5412 | |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
5413 static void |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
5414 w32_ring_bell (void) |
| 13434 | 5415 { |
| 35000 | 5416 struct frame *f; |
| 5417 | |
| 5418 f = SELECTED_FRAME (); | |
| 5419 | |
| 13434 | 5420 BLOCK_INPUT; |
| 5421 | |
|
35449
98d65e364070
(w32_ring_bell): Only support visible bell on w32
Andrew Innes <andrewi@gnu.org>
parents:
35384
diff
changeset
|
5422 if (FRAME_W32_P (f) && visible_bell) |
|
22059
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
5423 { |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
5424 int i; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5425 HWND hwnd = FRAME_W32_WINDOW (SELECTED_FRAME ()); |
|
22059
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
5426 |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5427 for (i = 0; i < 5; i++) |
|
22059
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
5428 { |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
5429 FlashWindow (hwnd, TRUE); |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
5430 Sleep (10); |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
5431 } |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
5432 FlashWindow (hwnd, FALSE); |
|
23fda104cd36
(w32_ring_bell): Flash window correctly.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21885
diff
changeset
|
5433 } |
| 13434 | 5434 else |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
5435 w32_sys_ring_bell (); |
| 13434 | 5436 |
| 5437 UNBLOCK_INPUT; | |
| 5438 } | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5439 |
| 13434 | 5440 |
| 5441 /* Specify how many text lines, from the top of the window, | |
| 5442 should be affected by insert-lines and delete-lines operations. | |
| 5443 This, and those operations, are used only within an update | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5444 that is bounded by calls to x_update_begin and x_update_end. */ |
| 13434 | 5445 |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
5446 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
5447 w32_set_terminal_window (n) |
| 13434 | 5448 register int n; |
| 5449 { | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5450 /* This function intentionally left blank. */ |
| 13434 | 5451 } |
| 5452 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5453 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5454 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5455 /*********************************************************************** |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5456 Line Dance |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5457 ***********************************************************************/ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5458 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5459 /* Perform an insert-lines or delete-lines operation, inserting N |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5460 lines or deleting -N lines at vertical position VPOS. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5461 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5462 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5463 x_ins_del_lines (vpos, n) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5464 int vpos, n; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5465 { |
| 35000 | 5466 struct frame *f; |
| 5467 | |
| 5468 if (updating_frame) | |
| 5469 f = updating_frame; | |
| 5470 else | |
| 5471 f = SELECTED_FRAME (); | |
| 5472 | |
| 5473 if (! FRAME_W32_P (f)) | |
| 5474 return; | |
| 5475 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5476 abort (); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5477 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5478 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5479 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5480 /* Scroll part of the display as described by RUN. */ |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
5481 |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
5482 static void |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5483 x_scroll_run (w, run) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5484 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5485 struct run *run; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5486 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5487 struct frame *f = XFRAME (w->frame); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5488 int x, y, width, height, from_y, to_y, bottom_y; |
|
42934
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5489 HWND hwnd = FRAME_W32_WINDOW (f); |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5490 HRGN expect_dirty; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5491 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5492 /* Get frame-relative bounding box of the text display area of W, |
| 41125 | 5493 without mode lines. Include in this box the left and right |
| 5494 fringes of W. */ | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5495 window_box (w, -1, &x, &y, &width, &height); |
| 41125 | 5496 width += FRAME_X_FRINGE_WIDTH (f); |
| 5497 x -= FRAME_X_LEFT_FRINGE_WIDTH (f); | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5498 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5499 from_y = WINDOW_TO_FRAME_PIXEL_Y (w, run->current_y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5500 to_y = WINDOW_TO_FRAME_PIXEL_Y (w, run->desired_y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5501 bottom_y = y + height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5502 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5503 if (to_y < from_y) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5504 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5505 /* Scrolling up. Make sure we don't copy part of the mode |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5506 line at the bottom. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5507 if (from_y + run->height > bottom_y) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5508 height = bottom_y - from_y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5509 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5510 height = run->height; |
|
42934
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5511 expect_dirty = CreateRectRgn (x, y + height, x + width, bottom_y); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5512 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5513 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5514 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5515 /* Scolling down. Make sure we don't copy over the mode line. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5516 at the bottom. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5517 if (to_y + run->height > bottom_y) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5518 height = bottom_y - to_y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5519 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5520 height = run->height; |
|
42934
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5521 expect_dirty = CreateRectRgn (x, y, x + width, to_y); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5522 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5523 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5524 BLOCK_INPUT; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5525 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5526 /* Cursor off. Will be switched on again in x_update_window_end. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5527 updated_window = w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5528 x_clear_cursor (w); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5529 |
|
42934
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5530 { |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5531 RECT from; |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5532 RECT to; |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5533 HRGN dirty = CreateRectRgn (0, 0, 0, 0); |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5534 HRGN combined = CreateRectRgn (0, 0, 0, 0); |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5535 |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5536 from.left = to.left = x; |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5537 from.right = to.right = x + width; |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5538 from.top = from_y; |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5539 from.bottom = from_y + height; |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5540 to.top = y; |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5541 to.bottom = bottom_y; |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5542 |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5543 ScrollWindowEx (hwnd, 0, to_y - from_y, &from, &to, dirty, |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5544 NULL, SW_INVALIDATE); |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5545 |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5546 /* Combine this with what we expect to be dirty. This covers the |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5547 case where not all of the region we expect is actually dirty. */ |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5548 CombineRgn (combined, dirty, expect_dirty, RGN_OR); |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5549 |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5550 /* If the dirty region is not what we expected, redraw the entire frame. */ |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5551 if (!EqualRgn (combined, expect_dirty)) |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5552 SET_FRAME_GARBAGED (f); |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5553 } |
|
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
5554 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5555 UNBLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5556 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5557 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
5558 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5559 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5560 /*********************************************************************** |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5561 Exposure Events |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5562 ***********************************************************************/ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5563 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5564 /* Redisplay an exposed area of frame F. X and Y are the upper-left |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5565 corner of the exposed rectangle. W and H are width and height of |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5566 the exposed area. All are pixel values. W or H zero means redraw |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5567 the entire frame. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5568 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5569 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5570 expose_frame (f, x, y, w, h) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5571 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5572 int x, y, w, h; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5573 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5574 RECT r; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5575 int mouse_face_overwritten_p = 0; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5576 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5577 TRACE ((stderr, "expose_frame ")); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5578 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5579 /* No need to redraw if frame will be redrawn soon. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5580 if (FRAME_GARBAGED_P (f)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5581 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5582 TRACE ((stderr, " garbaged\n")); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5583 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5584 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5585 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5586 /* If basic faces haven't been realized yet, there is no point in |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5587 trying to redraw anything. This can happen when we get an expose |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5588 event while Emacs is starting, e.g. by moving another window. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5589 if (FRAME_FACE_CACHE (f) == NULL |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5590 || FRAME_FACE_CACHE (f)->used < BASIC_FACE_ID_SENTINEL) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5591 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5592 TRACE ((stderr, " no faces\n")); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5593 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5594 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5595 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5596 if (w == 0 || h == 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5597 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5598 r.left = r.top = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5599 r.right = CANON_X_UNIT (f) * f->width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5600 r.bottom = CANON_Y_UNIT (f) * f->height; |
| 13434 | 5601 } |
| 5602 else | |
| 5603 { | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5604 r.left = x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5605 r.top = y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5606 r.right = x + w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5607 r.bottom = y + h; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5608 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5609 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5610 TRACE ((stderr, "(%d, %d, %d, %d)\n", r.left, r.top, r.right, r.bottom)); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5611 mouse_face_overwritten_p = expose_window_tree (XWINDOW (f->root_window), &r); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5612 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5613 if (WINDOWP (f->tool_bar_window)) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5614 mouse_face_overwritten_p |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5615 |= expose_window (XWINDOW (f->tool_bar_window), &r); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5616 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5617 /* Some window managers support a focus-follows-mouse style with |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5618 delayed raising of frames. Imagine a partially obscured frame, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5619 and moving the mouse into partially obscured mouse-face on that |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5620 frame. The visible part of the mouse-face will be highlighted, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5621 then the WM raises the obscured frame. With at least one WM, KDE |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5622 2.1, Emacs is not getting any event for the raising of the frame |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5623 (even tried with SubstructureRedirectMask), only Expose events. |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5624 These expose events will draw text normally, i.e. not |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5625 highlighted. Which means we must redo the highlight here. |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5626 Subsume it under ``we love X''. --gerd 2001-08-15 */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5627 /* Included in Windows version because Windows most likely does not |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5628 do the right thing if any third party tool offers |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5629 focus-follows-mouse with delayed raise. --jason 2001-10-12 */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5630 if (mouse_face_overwritten_p && !FRAME_GARBAGED_P (f)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5631 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5632 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5633 if (f == dpyinfo->mouse_face_mouse_frame) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5634 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5635 int x = dpyinfo->mouse_face_mouse_x; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5636 int y = dpyinfo->mouse_face_mouse_y; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5637 clear_mouse_face (dpyinfo); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5638 note_mouse_highlight (f, x, y); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5639 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5640 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5641 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5642 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5643 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5644 /* Redraw (parts) of all windows in the window tree rooted at W that |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5645 intersect R. R contains frame pixel coordinates. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5646 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5647 static int |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5648 expose_window_tree (w, r) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5649 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5650 RECT *r; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5651 { |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5652 struct frame *f = XFRAME (w->frame); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5653 int mouse_face_overwritten_p = 0; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5654 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5655 while (w && !FRAME_GARBAGED_P (f)) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5656 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5657 if (!NILP (w->hchild)) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5658 mouse_face_overwritten_p |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5659 |= expose_window_tree (XWINDOW (w->hchild), r); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5660 else if (!NILP (w->vchild)) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5661 mouse_face_overwritten_p |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5662 |= expose_window_tree (XWINDOW (w->vchild), r); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5663 else |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5664 mouse_face_overwritten_p |= expose_window (w, r); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5665 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5666 w = NILP (w->next) ? NULL : XWINDOW (w->next); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5667 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5668 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5669 return mouse_face_overwritten_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5670 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5671 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5672 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5673 /* Redraw the part of glyph row area AREA of glyph row ROW on window W |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5674 which intersects rectangle R. R is in window-relative coordinates. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5675 |
| 13434 | 5676 static void |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5677 expose_area (w, row, r, area) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5678 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5679 struct glyph_row *row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5680 RECT *r; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5681 enum glyph_row_area area; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5682 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5683 struct glyph *first = row->glyphs[area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5684 struct glyph *end = row->glyphs[area] + row->used[area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5685 struct glyph *last; |
|
34229
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5686 int first_x, start_x, x; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5687 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5688 if (area == TEXT_AREA && row->fill_line_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5689 /* If row extends face to end of line write the whole line. */ |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
5690 x_draw_glyphs (w, 0, row, area, |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5691 0, row->used[area], |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5692 DRAW_NORMAL_TEXT, 0); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5693 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5694 { |
|
34229
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5695 /* Set START_X to the window-relative start position for drawing glyphs of |
|
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5696 AREA. The first glyph of the text area can be partially visible. |
|
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5697 The first glyphs of other areas cannot. */ |
|
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5698 if (area == LEFT_MARGIN_AREA) |
|
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5699 start_x = 0; |
|
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5700 else if (area == TEXT_AREA) |
|
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5701 start_x = row->x + window_box_width (w, LEFT_MARGIN_AREA); |
|
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5702 else |
|
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5703 start_x = (window_box_width (w, LEFT_MARGIN_AREA) |
|
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5704 + window_box_width (w, TEXT_AREA)); |
|
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5705 x = start_x; |
|
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5706 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5707 /* Find the first glyph that must be redrawn. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5708 while (first < end |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5709 && x + first->pixel_width < r->left) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5710 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5711 x += first->pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5712 ++first; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5713 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5714 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5715 /* Find the last one. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5716 last = first; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5717 first_x = x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5718 while (last < end |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5719 && x < r->right) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5720 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5721 x += last->pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5722 ++last; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5723 } |
|
34229
54b8aa09c4a9
(expose_area): Complete last change.
Jason Rumney <jasonr@gnu.org>
parents:
34222
diff
changeset
|
5724 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5725 /* Repaint. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5726 if (last > first) |
|
34222
7e09cff3b2ab
(x_produce_glyphs): If a font for a component of
Jason Rumney <jasonr@gnu.org>
parents:
34135
diff
changeset
|
5727 x_draw_glyphs (w, first_x - start_x, row, area, |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5728 first - row->glyphs[area], |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5729 last - row->glyphs[area], |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5730 DRAW_NORMAL_TEXT, 0); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5731 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5732 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5733 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5734 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5735 /* Redraw the parts of the glyph row ROW on window W intersecting |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5736 rectangle R. R is in window-relative coordinates. Value is |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5737 non-zero if mouse face was overwritten. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5738 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5739 static int |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5740 expose_line (w, row, r) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5741 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5742 struct glyph_row *row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5743 RECT *r; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5744 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5745 xassert (row->enabled_p); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5746 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5747 if (row->mode_line_p || w->pseudo_window_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5748 x_draw_glyphs (w, 0, row, TEXT_AREA, 0, row->used[TEXT_AREA], |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
5749 DRAW_NORMAL_TEXT, 0); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5750 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5751 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5752 if (row->used[LEFT_MARGIN_AREA]) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5753 expose_area (w, row, r, LEFT_MARGIN_AREA); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5754 if (row->used[TEXT_AREA]) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5755 expose_area (w, row, r, TEXT_AREA); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5756 if (row->used[RIGHT_MARGIN_AREA]) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5757 expose_area (w, row, r, RIGHT_MARGIN_AREA); |
| 41125 | 5758 x_draw_row_fringe_bitmaps (w, row); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5759 } |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5760 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5761 return row->mouse_face_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5762 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5763 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5764 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5765 /* Return non-zero if W's cursor intersects rectangle R. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5766 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5767 static int |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5768 x_phys_cursor_in_rect_p (w, r) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5769 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5770 RECT *r; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5771 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5772 RECT cr, result; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5773 struct glyph *cursor_glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5774 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5775 cursor_glyph = get_phys_cursor_glyph (w); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5776 if (cursor_glyph) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5777 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5778 cr.left = w->phys_cursor.x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5779 cr.top = w->phys_cursor.y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5780 cr.right = cr.left + cursor_glyph->pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5781 cr.bottom = cr.top + w->phys_cursor_height; |
|
30988
a69a2ac4345b
(help_echo_window): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
30730
diff
changeset
|
5782 return IntersectRect (&result, &cr, r); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5783 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5784 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5785 return 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5786 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5787 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5788 |
|
47099
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5789 /* Redraw those parts of glyphs rows during expose event handling that |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5790 overlap other rows. Redrawing of an exposed line writes over parts |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5791 of lines overlapping that exposed line; this function fixes that. |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5792 |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5793 W is the window being exposed. FIRST_OVERLAPPING_ROW is the first |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5794 row in W's current matrix that is exposed and overlaps other rows. |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5795 LAST_OVERLAPPING_ROW is the last such row. */ |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5796 |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5797 static void |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5798 expose_overlaps (w, first_overlapping_row, last_overlapping_row) |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5799 struct window *w; |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5800 struct glyph_row *first_overlapping_row; |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5801 struct glyph_row *last_overlapping_row; |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5802 { |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5803 struct glyph_row *row; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5804 |
|
47099
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5805 for (row = first_overlapping_row; row <= last_overlapping_row; ++row) |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5806 if (row->overlapping_p) |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5807 { |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5808 xassert (row->enabled_p && !row->mode_line_p); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5809 |
|
47099
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5810 if (row->used[LEFT_MARGIN_AREA]) |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5811 x_fix_overlapping_area (w, row, LEFT_MARGIN_AREA); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5812 |
|
47099
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5813 if (row->used[TEXT_AREA]) |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5814 x_fix_overlapping_area (w, row, TEXT_AREA); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5815 |
|
47099
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5816 if (row->used[RIGHT_MARGIN_AREA]) |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5817 x_fix_overlapping_area (w, row, RIGHT_MARGIN_AREA); |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5818 } |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5819 } |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5820 |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5821 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5822 /* Redraw the part of window W intersection rectagle FR. Pixel |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5823 coordinates in FR are frame relative. Call this function with |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5824 input blocked. Value is non-zero if the exposure overwrites |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5825 mouse-face. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5826 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5827 static int |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5828 expose_window (w, fr) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5829 struct window *w; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5830 RECT *fr; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5831 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5832 struct frame *f = XFRAME (w->frame); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5833 RECT wr, r; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5834 int mouse_face_overwritten_p = 0; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5835 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5836 /* If window is not yet fully initialized, do nothing. This can |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5837 happen when toolkit scroll bars are used and a window is split. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5838 Reconfiguring the scroll bar will generate an expose for a newly |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5839 created window. */ |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5840 if (w->current_matrix == NULL) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5841 return 0; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5842 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5843 /* When we're currently updating the window, display and current |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5844 matrix usually don't agree. Arrange for a thorough display |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5845 later. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5846 if (w == updated_window) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5847 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5848 SET_FRAME_GARBAGED (f); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5849 return 0; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5850 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5851 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5852 /* Frame-relative pixel rectangle of W. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5853 wr.left = XFASTINT (w->left) * CANON_X_UNIT (f); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5854 wr.top = XFASTINT (w->top) * CANON_Y_UNIT (f); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5855 wr.right = wr.left + XFASTINT (w->width) * CANON_X_UNIT (f); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5856 wr.bottom = wr.top + XFASTINT (w->height) * CANON_Y_UNIT (f); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5857 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5858 if (IntersectRect(&r, fr, &wr)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5859 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5860 int yb = window_text_bottom_y (w); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5861 struct glyph_row *row; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5862 int cursor_cleared_p; |
|
47099
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5863 struct glyph_row *first_overlapping_row, *last_overlapping_row; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5864 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5865 TRACE ((stderr, "expose_window (%d, %d, %d, %d)\n", |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5866 r.left, r.top, r.right, r.bottom)); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5867 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5868 /* Convert to window coordinates. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5869 r.left = FRAME_TO_WINDOW_PIXEL_X (w, r.left); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5870 r.right = FRAME_TO_WINDOW_PIXEL_X (w, r.right); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5871 r.top = FRAME_TO_WINDOW_PIXEL_Y (w, r.top); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5872 r.bottom = FRAME_TO_WINDOW_PIXEL_Y (w, r.bottom); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5873 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5874 /* Turn off the cursor. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5875 if (!w->pseudo_window_p |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5876 && x_phys_cursor_in_rect_p (w, &r)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5877 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5878 x_clear_cursor (w); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5879 cursor_cleared_p = 1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5880 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5881 else |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5882 cursor_cleared_p = 0; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5883 |
|
47099
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5884 /* Update lines intersecting rectangle R. */ |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5885 first_overlapping_row = last_overlapping_row = NULL; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5886 for (row = w->current_matrix->rows; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5887 row->enabled_p; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5888 ++row) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5889 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5890 int y0 = row->y; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5891 int y1 = MATRIX_ROW_BOTTOM_Y (row); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5892 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5893 if ((y0 >= r.top && y0 < r.bottom) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5894 || (y1 > r.top && y1 < r.bottom) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5895 || (r.top >= y0 && r.top < y1) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5896 || (r.bottom > y0 && r.bottom < y1)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5897 { |
|
47099
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5898 if (row->overlapping_p) |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5899 { |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5900 if (first_overlapping_row == NULL) |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5901 first_overlapping_row = row; |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5902 last_overlapping_row = row; |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5903 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5904 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5905 if (expose_line (w, row, &r)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5906 mouse_face_overwritten_p = 1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5907 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5908 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5909 if (y1 >= yb) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5910 break; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5911 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5912 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5913 /* Display the mode line if there is one. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5914 if (WINDOW_WANTS_MODELINE_P (w) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5915 && (row = MATRIX_MODE_LINE_ROW (w->current_matrix), |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5916 row->enabled_p) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5917 && row->y < r.bottom) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5918 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5919 if (expose_line (w, row, &r)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5920 mouse_face_overwritten_p = 1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5921 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5922 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5923 if (!w->pseudo_window_p) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5924 { |
|
47099
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5925 /* Fix the display of overlapping rows. */ |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5926 if (first_overlapping_row) |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
5927 expose_overlaps (w, first_overlapping_row, last_overlapping_row); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
5928 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5929 /* Draw border between windows. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5930 x_draw_vertical_border (w); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5931 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5932 /* Turn the cursor on again. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5933 if (cursor_cleared_p) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5934 x_update_window_cursor (w, 1); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5935 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5936 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5937 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
5938 return mouse_face_overwritten_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5939 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5940 |
| 13434 | 5941 |
| 5942 static void | |
| 5943 frame_highlight (f) | |
| 5944 struct frame *f; | |
| 5945 { | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5946 x_update_cursor (f, 1); |
| 13434 | 5947 } |
| 5948 | |
| 5949 static void | |
| 5950 frame_unhighlight (f) | |
| 5951 struct frame *f; | |
| 5952 { | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5953 x_update_cursor (f, 1); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5954 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
5955 |
| 13434 | 5956 /* The focus has changed. Update the frames as necessary to reflect |
| 5957 the new situation. Note that we can't change the selected frame | |
| 5958 here, because the Lisp code we are interrupting might become confused. | |
| 5959 Each event gets marked with the frame in which it occurred, so the | |
| 5960 Lisp code can tell when the switch took place by examining the events. */ | |
| 5961 | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
5962 static void |
| 13434 | 5963 x_new_focus_frame (dpyinfo, frame) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
5964 struct w32_display_info *dpyinfo; |
| 13434 | 5965 struct frame *frame; |
| 5966 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
5967 struct frame *old_focus = dpyinfo->w32_focus_frame; |
| 13434 | 5968 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
5969 if (frame != dpyinfo->w32_focus_frame) |
| 13434 | 5970 { |
| 5971 /* Set this before calling other routines, so that they see | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
5972 the correct value of w32_focus_frame. */ |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
5973 dpyinfo->w32_focus_frame = frame; |
| 13434 | 5974 |
| 5975 if (old_focus && old_focus->auto_lower) | |
| 5976 x_lower_frame (old_focus); | |
| 5977 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
5978 if (dpyinfo->w32_focus_frame && dpyinfo->w32_focus_frame->auto_raise) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
5979 pending_autoraise_frame = dpyinfo->w32_focus_frame; |
| 13434 | 5980 else |
| 5981 pending_autoraise_frame = 0; | |
| 5982 } | |
| 5983 | |
| 5984 x_frame_rehighlight (dpyinfo); | |
| 5985 } | |
| 5986 | |
| 5987 /* Handle an event saying the mouse has moved out of an Emacs frame. */ | |
| 5988 | |
| 5989 void | |
| 5990 x_mouse_leave (dpyinfo) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
5991 struct w32_display_info *dpyinfo; |
| 13434 | 5992 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
5993 x_new_focus_frame (dpyinfo, dpyinfo->w32_focus_event_frame); |
| 13434 | 5994 } |
| 5995 | |
| 5996 /* The focus has changed, or we have redirected a frame's focus to | |
| 5997 another frame (this happens when a frame uses a surrogate | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
5998 mini-buffer frame). Shift the highlight as appropriate. |
| 13434 | 5999 |
| 6000 The FRAME argument doesn't necessarily have anything to do with which | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6001 frame is being highlighted or un-highlighted; we only use it to find |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6002 the appropriate X display info. */ |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6003 |
| 13434 | 6004 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6005 w32_frame_rehighlight (frame) |
| 13434 | 6006 struct frame *frame; |
| 6007 { | |
| 35000 | 6008 if (! FRAME_W32_P (frame)) |
| 6009 return; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6010 x_frame_rehighlight (FRAME_W32_DISPLAY_INFO (frame)); |
| 13434 | 6011 } |
| 6012 | |
| 6013 static void | |
| 6014 x_frame_rehighlight (dpyinfo) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6015 struct w32_display_info *dpyinfo; |
| 13434 | 6016 { |
|
47148
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
6017 struct frame *old_highlight = dpyinfo->x_highlight_frame; |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6018 |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6019 if (dpyinfo->w32_focus_frame) |
| 13434 | 6020 { |
|
47148
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
6021 dpyinfo->x_highlight_frame |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6022 = ((GC_FRAMEP (FRAME_FOCUS_FRAME (dpyinfo->w32_focus_frame))) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6023 ? XFRAME (FRAME_FOCUS_FRAME (dpyinfo->w32_focus_frame)) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6024 : dpyinfo->w32_focus_frame); |
|
47148
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
6025 if (! FRAME_LIVE_P (dpyinfo->x_highlight_frame)) |
| 13434 | 6026 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6027 FRAME_FOCUS_FRAME (dpyinfo->w32_focus_frame) = Qnil; |
|
47148
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
6028 dpyinfo->x_highlight_frame = dpyinfo->w32_focus_frame; |
| 13434 | 6029 } |
| 6030 } | |
| 6031 else | |
|
47148
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
6032 dpyinfo->x_highlight_frame = 0; |
|
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
6033 |
|
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
6034 if (dpyinfo->x_highlight_frame != old_highlight) |
| 13434 | 6035 { |
| 6036 if (old_highlight) | |
| 6037 frame_unhighlight (old_highlight); | |
|
47148
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
6038 if (dpyinfo->x_highlight_frame) |
|
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
6039 frame_highlight (dpyinfo->x_highlight_frame); |
| 13434 | 6040 } |
| 6041 } | |
| 6042 | |
| 6043 /* Keyboard processing - modifier keys, etc. */ | |
| 6044 | |
| 6045 /* Convert a keysym to its name. */ | |
| 6046 | |
| 6047 char * | |
| 6048 x_get_keysym_name (keysym) | |
| 6049 int keysym; | |
| 6050 { | |
| 6051 /* Make static so we can always return it */ | |
| 6052 static char value[100]; | |
| 6053 | |
| 6054 BLOCK_INPUT; | |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
6055 GetKeyNameText (keysym, value, 100); |
| 13434 | 6056 UNBLOCK_INPUT; |
| 6057 | |
| 6058 return value; | |
| 6059 } | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6060 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6061 |
| 13434 | 6062 |
| 6063 /* Mouse clicks and mouse movement. Rah. */ | |
| 6064 | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6065 /* Given a pixel position (PIX_X, PIX_Y) on frame F, return glyph |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6066 co-ordinates in (*X, *Y). Set *BOUNDS to the rectangle that the |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6067 glyph at X, Y occupies, if BOUNDS != 0. If NOCLIP is non-zero, do |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6068 not force the value into range. */ |
| 13434 | 6069 |
| 6070 void | |
| 6071 pixel_to_glyph_coords (f, pix_x, pix_y, x, y, bounds, noclip) | |
| 6072 FRAME_PTR f; | |
| 6073 register int pix_x, pix_y; | |
| 6074 register int *x, *y; | |
| 6075 RECT *bounds; | |
| 6076 int noclip; | |
| 6077 { | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6078 /* Support tty mode: if Vwindow_system is nil, behave correctly. */ |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6079 if (NILP (Vwindow_system)) |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6080 { |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6081 *x = pix_x; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6082 *y = pix_y; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6083 return; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6084 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6085 |
| 13434 | 6086 /* Arrange for the division in PIXEL_TO_CHAR_COL etc. to round down |
| 6087 even for negative values. */ | |
| 6088 if (pix_x < 0) | |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
6089 pix_x -= FONT_WIDTH (FRAME_FONT (f)) - 1; |
| 13434 | 6090 if (pix_y < 0) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6091 pix_y -= (f)->output_data.w32->line_height - 1; |
| 13434 | 6092 |
| 6093 pix_x = PIXEL_TO_CHAR_COL (f, pix_x); | |
| 6094 pix_y = PIXEL_TO_CHAR_ROW (f, pix_y); | |
| 6095 | |
| 6096 if (bounds) | |
| 6097 { | |
| 6098 bounds->left = CHAR_TO_PIXEL_COL (f, pix_x); | |
| 6099 bounds->top = CHAR_TO_PIXEL_ROW (f, pix_y); | |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
6100 bounds->right = bounds->left + FONT_WIDTH (FRAME_FONT (f)) - 1; |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6101 bounds->bottom = bounds->top + f->output_data.w32->line_height - 1; |
| 13434 | 6102 } |
| 6103 | |
| 6104 if (!noclip) | |
| 6105 { | |
| 6106 if (pix_x < 0) | |
| 6107 pix_x = 0; | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6108 else if (pix_x > FRAME_WINDOW_WIDTH (f)) |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6109 pix_x = FRAME_WINDOW_WIDTH (f); |
| 13434 | 6110 |
| 6111 if (pix_y < 0) | |
| 6112 pix_y = 0; | |
| 6113 else if (pix_y > f->height) | |
| 6114 pix_y = f->height; | |
| 6115 } | |
| 6116 | |
| 6117 *x = pix_x; | |
| 6118 *y = pix_y; | |
| 6119 } | |
| 6120 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6121 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6122 /* Given HPOS/VPOS in the current matrix of W, return corresponding |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6123 frame-relative pixel positions in *FRAME_X and *FRAME_Y. If we |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6124 can't tell the positions because W's display is not up to date, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6125 return 0. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6126 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6127 int |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6128 glyph_to_pixel_coords (w, hpos, vpos, frame_x, frame_y) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6129 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6130 int hpos, vpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6131 int *frame_x, *frame_y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6132 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6133 int success_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6134 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6135 xassert (hpos >= 0 && hpos < w->current_matrix->matrix_w); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6136 xassert (vpos >= 0 && vpos < w->current_matrix->matrix_h); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6137 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6138 if (display_completed) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6139 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6140 struct glyph_row *row = MATRIX_ROW (w->current_matrix, vpos); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6141 struct glyph *glyph = row->glyphs[TEXT_AREA]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6142 struct glyph *end = glyph + min (hpos, row->used[TEXT_AREA]); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6143 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6144 *frame_y = row->y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6145 *frame_x = row->x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6146 while (glyph < end) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6147 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6148 *frame_x += glyph->pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6149 ++glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6150 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6151 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6152 success_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6153 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6154 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6155 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6156 *frame_y = *frame_x = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6157 success_p = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6158 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6159 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6160 *frame_y = WINDOW_TO_FRAME_PIXEL_Y (w, *frame_y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6161 *frame_x = WINDOW_TO_FRAME_PIXEL_X (w, *frame_x); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6162 return success_p; |
| 13434 | 6163 } |
| 6164 | |
|
42720
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6165 /* Parse a button MESSAGE. The button index is returned in PBUTTON, and |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6166 the state in PUP. XBUTTON provides extra information for extended mouse |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6167 button messages. Returns FALSE if unable to parse the message. */ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
6168 BOOL |
|
42720
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6169 parse_button (message, xbutton, pbutton, pup) |
| 13434 | 6170 int message; |
|
42720
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6171 int xbutton; |
| 13434 | 6172 int * pbutton; |
| 6173 int * pup; | |
| 6174 { | |
| 6175 int button = 0; | |
| 6176 int up = 0; | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
6177 |
| 13434 | 6178 switch (message) |
| 6179 { | |
| 6180 case WM_LBUTTONDOWN: | |
| 6181 button = 0; | |
| 6182 up = 0; | |
| 6183 break; | |
| 6184 case WM_LBUTTONUP: | |
| 6185 button = 0; | |
| 6186 up = 1; | |
| 6187 break; | |
| 6188 case WM_MBUTTONDOWN: | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6189 if (NILP (Vw32_swap_mouse_buttons)) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6190 button = 1; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6191 else |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6192 button = 2; |
| 13434 | 6193 up = 0; |
| 6194 break; | |
| 6195 case WM_MBUTTONUP: | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6196 if (NILP (Vw32_swap_mouse_buttons)) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6197 button = 1; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6198 else |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6199 button = 2; |
| 13434 | 6200 up = 1; |
| 6201 break; | |
| 6202 case WM_RBUTTONDOWN: | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6203 if (NILP (Vw32_swap_mouse_buttons)) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6204 button = 2; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6205 else |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6206 button = 1; |
| 13434 | 6207 up = 0; |
| 6208 break; | |
| 6209 case WM_RBUTTONUP: | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6210 if (NILP (Vw32_swap_mouse_buttons)) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6211 button = 2; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6212 else |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
6213 button = 1; |
| 13434 | 6214 up = 1; |
| 6215 break; | |
|
42720
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6216 case WM_XBUTTONDOWN: |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6217 button = xbutton + 2; |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6218 up = 0; |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6219 break; |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6220 case WM_XBUTTONUP: |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6221 button = xbutton + 2; |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6222 up = 1; |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6223 break; |
| 13434 | 6224 default: |
| 6225 return (FALSE); | |
| 6226 } | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
6227 |
| 13434 | 6228 if (pup) *pup = up; |
| 6229 if (pbutton) *pbutton = button; | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
6230 |
| 13434 | 6231 return (TRUE); |
| 6232 } | |
| 6233 | |
| 6234 | |
| 6235 /* Prepare a mouse-event in *RESULT for placement in the input queue. | |
| 6236 | |
| 6237 If the event is a button press, then note that we have grabbed | |
| 6238 the mouse. */ | |
| 6239 | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6240 static Lisp_Object |
| 13434 | 6241 construct_mouse_click (result, msg, f) |
| 6242 struct input_event *result; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6243 W32Msg *msg; |
| 13434 | 6244 struct frame *f; |
| 6245 { | |
| 6246 int button; | |
| 6247 int up; | |
| 6248 | |
|
42720
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6249 parse_button (msg->msg.message, HIWORD (msg->msg.wParam), |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
6250 &button, &up); |
| 13434 | 6251 |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
6252 /* Make the event type NO_EVENT; we'll change that when we decide |
| 13434 | 6253 otherwise. */ |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
6254 result->kind = MOUSE_CLICK_EVENT; |
| 13434 | 6255 result->code = button; |
| 6256 result->timestamp = msg->msg.time; | |
| 6257 result->modifiers = (msg->dwModifiers | |
| 6258 | (up | |
| 6259 ? up_modifier | |
| 6260 : down_modifier)); | |
| 6261 | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6262 XSETINT (result->x, LOWORD (msg->msg.lParam)); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6263 XSETINT (result->y, HIWORD (msg->msg.lParam)); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6264 XSETFRAME (result->frame_or_window, f); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6265 result->arg = Qnil; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6266 return Qnil; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6267 } |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6268 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6269 static Lisp_Object |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6270 construct_mouse_wheel (result, msg, f) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6271 struct input_event *result; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6272 W32Msg *msg; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6273 struct frame *f; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6274 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6275 POINT p; |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
6276 result->kind = MOUSE_WHEEL_EVENT; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6277 result->code = (short) HIWORD (msg->msg.wParam); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6278 result->timestamp = msg->msg.time; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6279 result->modifiers = msg->dwModifiers; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6280 p.x = LOWORD (msg->msg.lParam); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6281 p.y = HIWORD (msg->msg.lParam); |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
6282 ScreenToClient (msg->msg.hwnd, &p); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6283 XSETINT (result->x, p.x); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6284 XSETINT (result->y, p.y); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
6285 XSETFRAME (result->frame_or_window, f); |
|
30199
298f10cd4ba5
(construct_mouse_click, construct_mouse_wheel)
Gerd Moellmann <gerd@gnu.org>
parents:
30179
diff
changeset
|
6286 result->arg = Qnil; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6287 return Qnil; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6288 } |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6289 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6290 static Lisp_Object |
| 21885 | 6291 construct_drag_n_drop (result, msg, f) |
| 6292 struct input_event *result; | |
| 6293 W32Msg *msg; | |
| 6294 struct frame *f; | |
| 6295 { | |
| 6296 Lisp_Object files; | |
| 6297 Lisp_Object frame; | |
| 6298 HDROP hdrop; | |
| 6299 POINT p; | |
| 6300 WORD num_files; | |
| 6301 char *name; | |
| 6302 int i, len; | |
| 6303 | |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
6304 result->kind = DRAG_N_DROP_EVENT; |
| 21885 | 6305 result->code = 0; |
| 6306 result->timestamp = msg->msg.time; | |
| 6307 result->modifiers = msg->dwModifiers; | |
| 6308 | |
|
24265
c5f1a1deffbb
(construct_drag_n_drop): Call DraqQueryPoint before
Andrew Innes <andrewi@gnu.org>
parents:
24146
diff
changeset
|
6309 hdrop = (HDROP) msg->msg.wParam; |
|
c5f1a1deffbb
(construct_drag_n_drop): Call DraqQueryPoint before
Andrew Innes <andrewi@gnu.org>
parents:
24146
diff
changeset
|
6310 DragQueryPoint (hdrop, &p); |
|
c5f1a1deffbb
(construct_drag_n_drop): Call DraqQueryPoint before
Andrew Innes <andrewi@gnu.org>
parents:
24146
diff
changeset
|
6311 |
| 24674 | 6312 #if 0 |
| 21885 | 6313 p.x = LOWORD (msg->msg.lParam); |
| 6314 p.y = HIWORD (msg->msg.lParam); | |
| 6315 ScreenToClient (msg->msg.hwnd, &p); | |
| 24674 | 6316 #endif |
| 6317 | |
| 21885 | 6318 XSETINT (result->x, p.x); |
| 6319 XSETINT (result->y, p.y); | |
| 6320 | |
| 6321 num_files = DragQueryFile (hdrop, 0xFFFFFFFF, NULL, 0); | |
| 6322 files = Qnil; | |
| 6323 | |
| 6324 for (i = 0; i < num_files; i++) | |
| 6325 { | |
| 6326 len = DragQueryFile (hdrop, i, NULL, 0); | |
| 6327 if (len <= 0) | |
| 6328 continue; | |
| 6329 name = alloca (len + 1); | |
| 6330 DragQueryFile (hdrop, i, name, len + 1); | |
|
44641
3afb0684cbc2
(construct_drag_n_drop): Likewise.
Jason Rumney <jasonr@gnu.org>
parents:
44359
diff
changeset
|
6331 files = Fcons (DECODE_FILE (build_string (name)), files); |
| 21885 | 6332 } |
| 6333 | |
| 6334 DragFinish (hdrop); | |
| 6335 | |
| 6336 XSETFRAME (frame, f); | |
| 6337 result->frame_or_window = Fcons (frame, files); | |
|
30199
298f10cd4ba5
(construct_mouse_click, construct_mouse_wheel)
Gerd Moellmann <gerd@gnu.org>
parents:
30179
diff
changeset
|
6338 result->arg = Qnil; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6339 return Qnil; |
| 21885 | 6340 } |
| 6341 | |
| 13434 | 6342 |
| 6343 /* Function to report a mouse movement to the mainstream Emacs code. | |
| 6344 The input handler calls this. | |
| 6345 | |
| 6346 We have received a mouse movement event, which is given in *event. | |
| 6347 If the mouse is over a different glyph than it was last time, tell | |
| 6348 the mainstream emacs code by setting mouse_moved. If not, ask for | |
| 6349 another motion event, so we can check again the next time it moves. */ | |
| 6350 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6351 static MSG last_mouse_motion_event; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6352 static Lisp_Object last_mouse_motion_frame; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6353 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6354 static void remember_mouse_glyph P_ ((struct frame *, int, int)); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6355 |
| 13434 | 6356 static void |
| 6357 note_mouse_movement (frame, msg) | |
| 6358 FRAME_PTR frame; | |
| 6359 MSG *msg; | |
| 6360 { | |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6361 int mouse_x = LOWORD (msg->lParam); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6362 int mouse_y = HIWORD (msg->lParam); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6363 |
| 13434 | 6364 last_mouse_movement_time = msg->time; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6365 memcpy (&last_mouse_motion_event, msg, sizeof (last_mouse_motion_event)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6366 XSETFRAME (last_mouse_motion_frame, frame); |
| 13434 | 6367 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
6368 if (msg->hwnd != FRAME_W32_WINDOW (frame)) |
| 13434 | 6369 { |
| 6370 frame->mouse_moved = 1; | |
| 6371 last_mouse_scroll_bar = Qnil; | |
| 6372 note_mouse_highlight (frame, -1, -1); | |
| 6373 } | |
| 6374 | |
| 6375 /* Has the mouse moved off the glyph it was on at the last sighting? */ | |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6376 else if (mouse_x < last_mouse_glyph.left |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6377 || mouse_x > last_mouse_glyph.right |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6378 || mouse_y < last_mouse_glyph.top |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6379 || mouse_y > last_mouse_glyph.bottom) |
| 13434 | 6380 { |
| 6381 frame->mouse_moved = 1; | |
| 6382 last_mouse_scroll_bar = Qnil; | |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6383 note_mouse_highlight (frame, mouse_x, mouse_y); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6384 /* Remember the mouse position here, as w32_mouse_position only |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6385 gets called when mouse tracking is enabled but we also need |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6386 to keep track of the mouse for help_echo and highlighting at |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6387 other times. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6388 remember_mouse_glyph (frame, mouse_x, mouse_y); |
| 13434 | 6389 } |
| 6390 } | |
| 6391 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6392 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6393 /************************************************************************ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6394 Mouse Face |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6395 ************************************************************************/ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6396 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6397 /* Find the glyph under window-relative coordinates X/Y in window W. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6398 Consider only glyphs from buffer text, i.e. no glyphs from overlay |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6399 strings. Return in *HPOS and *VPOS the row and column number of |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6400 the glyph found. Return in *AREA the glyph area containing X. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6401 Value is a pointer to the glyph found or null if X/Y is not on |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6402 text, or we can't tell because W's current matrix is not up to |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6403 date. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6404 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6405 static struct glyph * |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6406 x_y_to_hpos_vpos (w, x, y, hpos, vpos, area, buffer_only_p) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6407 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6408 int x, y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6409 int *hpos, *vpos, *area; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6410 int buffer_only_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6411 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6412 struct glyph *glyph, *end; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
6413 struct glyph_row *row = NULL; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6414 int x0, i, left_area_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6415 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6416 /* Find row containing Y. Give up if some row is not enabled. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6417 for (i = 0; i < w->current_matrix->nrows; ++i) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6418 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6419 row = MATRIX_ROW (w->current_matrix, i); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6420 if (!row->enabled_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6421 return NULL; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6422 if (y >= row->y && y < MATRIX_ROW_BOTTOM_Y (row)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6423 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6424 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6425 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6426 *vpos = i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6427 *hpos = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6428 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6429 /* Give up if Y is not in the window. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6430 if (i == w->current_matrix->nrows) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6431 return NULL; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6432 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6433 /* Get the glyph area containing X. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6434 if (w->pseudo_window_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6435 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6436 *area = TEXT_AREA; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6437 x0 = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6438 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6439 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6440 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6441 left_area_width = window_box_width (w, LEFT_MARGIN_AREA); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6442 if (x < left_area_width) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6443 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6444 *area = LEFT_MARGIN_AREA; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6445 x0 = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6446 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6447 else if (x < left_area_width + window_box_width (w, TEXT_AREA)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6448 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6449 *area = TEXT_AREA; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6450 x0 = row->x + left_area_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6451 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6452 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6453 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6454 *area = RIGHT_MARGIN_AREA; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6455 x0 = left_area_width + window_box_width (w, TEXT_AREA); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6456 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6457 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6458 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6459 /* Find glyph containing X. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6460 glyph = row->glyphs[*area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6461 end = glyph + row->used[*area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6462 while (glyph < end) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6463 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6464 if (x < x0 + glyph->pixel_width) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6465 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6466 if (w->pseudo_window_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6467 break; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6468 else if (!buffer_only_p || BUFFERP (glyph->object)) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6469 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6470 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
6471 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6472 x0 += glyph->pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6473 ++glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6474 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6475 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6476 if (glyph == end) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6477 return NULL; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6478 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6479 *hpos = glyph - row->glyphs[*area]; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6480 return glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6481 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6482 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6483 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6484 /* Convert frame-relative x/y to coordinates relative to window W. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6485 Takes pseudo-windows into account. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6486 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6487 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6488 frame_to_window_pixel_xy (w, x, y) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6489 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6490 int *x, *y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6491 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6492 if (w->pseudo_window_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6493 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6494 /* A pseudo-window is always full-width, and starts at the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6495 left edge of the frame, plus a frame border. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6496 struct frame *f = XFRAME (w->frame); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6497 *x -= FRAME_INTERNAL_BORDER_WIDTH_SAFE (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6498 *y = FRAME_TO_WINDOW_PIXEL_Y (w, *y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6499 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6500 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6501 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6502 *x = FRAME_TO_WINDOW_PIXEL_X (w, *x); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6503 *y = FRAME_TO_WINDOW_PIXEL_Y (w, *y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6504 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6505 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6506 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6507 |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6508 /* Take proper action when mouse has moved to the mode or header line |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6509 or marginal area of window W, x-position X and y-position Y. Area |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6510 is 1, 3, 6 or 7 for the mode line, header line, left and right |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6511 marginal area respectively. X is relative to the start of the text |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6512 display area of W, so the width of bitmap areas and scroll bars |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6513 must be subtracted to get a position relative to the start of the |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6514 mode line. */ |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6515 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6516 static void |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6517 note_mode_line_or_margin_highlight (w, x, y, portion) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6518 struct window *w; |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6519 int x, y, portion; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6520 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6521 struct frame *f = XFRAME (w->frame); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6522 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6523 Cursor cursor = dpyinfo->vertical_scroll_bar_cursor; |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6524 int charpos; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6525 Lisp_Object string, help, map, pos; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6526 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6527 if (portion == 1 || portion == 3) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6528 string = mode_line_string (w, x, y, portion == 1, &charpos); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6529 else |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6530 string = marginal_area_string (w, x, y, portion, &charpos); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6531 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6532 if (STRINGP (string)) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6533 { |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6534 pos = make_number (charpos); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6535 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6536 /* If we're on a string with `help-echo' text property, arrange |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6537 for the help to be displayed. This is done by setting the |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6538 global variable help_echo to the help string. */ |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6539 help = Fget_text_property (pos, Qhelp_echo, string); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6540 if (!NILP (help)) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6541 { |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6542 help_echo = help; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6543 XSETWINDOW (help_echo_window, w); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6544 help_echo_object = string; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6545 help_echo_pos = charpos; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6546 } |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6547 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6548 /* Change the mouse pointer according to what is under X/Y. */ |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6549 map = Fget_text_property (pos, Qlocal_map, string); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6550 if (!KEYMAPP (map)) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6551 map = Fget_text_property (pos, Qkeymap, string); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6552 if (KEYMAPP (map)) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6553 cursor = f->output_data.w32->nontext_cursor; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6554 } |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6555 |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6556 w32_define_cursor (FRAME_W32_WINDOW (f), cursor); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6557 } |
| 13434 | 6558 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6559 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6560 /* Take proper action when the mouse has moved to position X, Y on |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6561 frame F as regards highlighting characters that have mouse-face |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6562 properties. Also de-highlighting chars where the mouse was before. |
| 13434 | 6563 X and Y can be negative or out of range. */ |
| 6564 | |
| 6565 static void | |
| 6566 note_mouse_highlight (f, x, y) | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6567 struct frame *f; |
| 13434 | 6568 int x, y; |
| 6569 { | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6570 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6571 int portion; |
| 13434 | 6572 Lisp_Object window; |
| 6573 struct window *w; | |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6574 Cursor cursor = 0; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6575 struct buffer *b; |
| 13434 | 6576 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6577 /* When a menu is active, don't highlight because this looks odd. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6578 if (popup_activated ()) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6579 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6580 |
|
43373
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
6581 if (NILP (Vmouse_highlight) |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6582 || !f->glyphs_initialized_p) |
| 13434 | 6583 return; |
| 6584 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6585 dpyinfo->mouse_face_mouse_x = x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6586 dpyinfo->mouse_face_mouse_y = y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6587 dpyinfo->mouse_face_mouse_frame = f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6588 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6589 if (dpyinfo->mouse_face_defer) |
| 13434 | 6590 return; |
| 6591 | |
| 6592 if (gc_in_progress) | |
| 6593 { | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6594 dpyinfo->mouse_face_deferred_gc = 1; |
| 13434 | 6595 return; |
| 6596 } | |
| 6597 | |
| 6598 /* Which window is that in? */ | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6599 window = window_from_coordinates (f, x, y, &portion, 1); |
| 13434 | 6600 |
| 6601 /* If we were displaying active text in another window, clear that. */ | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6602 if (! EQ (window, dpyinfo->mouse_face_window)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6603 clear_mouse_face (dpyinfo); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6604 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6605 /* Not on a window -> return. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6606 if (!WINDOWP (window)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6607 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6608 |
|
40384
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
6609 /* Reset help_echo. It will get recomputed below. */ |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
6610 help_echo = Qnil; |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
6611 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6612 /* Convert to window-relative pixel coordinates. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6613 w = XWINDOW (window); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6614 frame_to_window_pixel_xy (w, &x, &y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6615 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6616 /* Handle tool-bar window differently since it doesn't display a |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6617 buffer. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6618 if (EQ (window, f->tool_bar_window)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6619 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6620 note_tool_bar_highlight (f, x, y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6621 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6622 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6623 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6624 /* Mouse is on the mode or header line? */ |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6625 if (portion == 1 || portion == 3 || portion == 6 || portion == 7) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6626 { |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
6627 note_mode_line_or_margin_highlight (w, x, y, portion); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6628 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6629 } |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6630 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6631 if (portion == 2) |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6632 cursor = f->output_data.w32->horizontal_drag_cursor; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6633 else |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6634 cursor = f->output_data.w32->text_cursor; |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6635 |
| 13434 | 6636 /* Are we in a window whose display is up to date? |
| 6637 And verify the buffer's text has not changed. */ | |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6638 b = XBUFFER (w->buffer); |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
6639 if (/* Within text portion of the window. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6640 portion == 0 |
| 13434 | 6641 && EQ (w->window_end_valid, w->buffer) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6642 && XFASTINT (w->last_modified) == BUF_MODIFF (b) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6643 && XFASTINT (w->last_overlay_modified) == BUF_OVERLAY_MODIFF (b)) |
| 13434 | 6644 { |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6645 int hpos, vpos, pos, i, area; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6646 struct glyph *glyph; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6647 Lisp_Object object; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6648 Lisp_Object mouse_face = Qnil, overlay = Qnil, position; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6649 Lisp_Object *overlay_vec = NULL; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6650 int len, noverlays; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6651 struct buffer *obuf; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6652 int obegv, ozv, same_region; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6653 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6654 /* Find the glyph under X/Y. */ |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6655 glyph = x_y_to_hpos_vpos (w, x, y, &hpos, &vpos, &area, 0); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6656 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6657 /* Clear mouse face if X/Y not over text. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6658 if (glyph == NULL |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6659 || area != TEXT_AREA |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6660 || !MATRIX_ROW (w->current_matrix, vpos)->displays_text_p) |
| 13434 | 6661 { |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6662 clear_mouse_face (dpyinfo); |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6663 cursor = f->output_data.w32->nontext_cursor; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6664 goto set_cursor; |
| 13434 | 6665 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6666 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6667 pos = glyph->charpos; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6668 object = glyph->object; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6669 if (!STRINGP (object) && !BUFFERP (object)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6670 goto set_cursor; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6671 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6672 /* If we get an out-of-range value, return now; avoid an error. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6673 if (BUFFERP (object) && pos > BUF_Z (b)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6674 goto set_cursor; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6675 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6676 /* Make the window's buffer temporarily current for |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6677 overlays_at and compute_char_face. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6678 obuf = current_buffer; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6679 current_buffer = b; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6680 obegv = BEGV; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6681 ozv = ZV; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6682 BEGV = BEG; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6683 ZV = Z; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6684 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6685 /* Is this char mouse-active or does it have help-echo? */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6686 position = make_number (pos); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6687 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6688 if (BUFFERP (object)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6689 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6690 /* Put all the overlays we want in a vector in overlay_vec. |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6691 Store the length in len. If there are more than 10, make |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6692 enough space for all, and try again. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6693 len = 10; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6694 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6695 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL, 0); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6696 if (noverlays > len) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6697 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6698 len = noverlays; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6699 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6700 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL,0); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6701 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6702 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6703 /* Sort overlays into increasing priority order. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6704 noverlays = sort_overlays (overlay_vec, noverlays, w); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6705 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6706 else |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6707 noverlays = 0; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6708 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6709 same_region = (EQ (window, dpyinfo->mouse_face_window) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6710 && vpos >= dpyinfo->mouse_face_beg_row |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6711 && vpos <= dpyinfo->mouse_face_end_row |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6712 && (vpos > dpyinfo->mouse_face_beg_row |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6713 || hpos >= dpyinfo->mouse_face_beg_col) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6714 && (vpos < dpyinfo->mouse_face_end_row |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6715 || hpos < dpyinfo->mouse_face_end_col |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6716 || dpyinfo->mouse_face_past_end)); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6717 |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6718 if (same_region) |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6719 cursor = 0; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6720 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6721 /* Check mouse-face highlighting. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6722 if (! same_region |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6723 /* If there exists an overlay with mouse-face overlapping |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6724 the one we are currently highlighting, we have to |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6725 check if we enter the overlapping overlay, and then |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6726 highlight that. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6727 || (OVERLAYP (dpyinfo->mouse_face_overlay) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6728 && mouse_face_overlay_overlaps (dpyinfo->mouse_face_overlay))) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6729 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6730 /* Find the highest priority overlay that has a mouse-face |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6731 property. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6732 overlay = Qnil; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6733 for (i = noverlays - 1; i >= 0 && NILP (overlay); --i) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6734 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6735 mouse_face = Foverlay_get (overlay_vec[i], Qmouse_face); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6736 if (!NILP (mouse_face)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6737 overlay = overlay_vec[i]; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6738 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6739 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6740 /* If we're actually highlighting the same overlay as |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6741 before, there's no need to do that again. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6742 if (!NILP (overlay) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6743 && EQ (overlay, dpyinfo->mouse_face_overlay)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6744 goto check_help_echo; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6745 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6746 dpyinfo->mouse_face_overlay = overlay; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6747 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6748 /* Clear the display of the old active region, if any. */ |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6749 if (clear_mouse_face (dpyinfo)) |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6750 cursor = 0; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6751 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6752 /* If no overlay applies, get a text property. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6753 if (NILP (overlay)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6754 mouse_face = Fget_text_property (position, Qmouse_face, object); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6755 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6756 /* Handle the overlay case. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6757 if (!NILP (overlay)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6758 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6759 /* Find the range of text around this char that |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6760 should be active. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6761 Lisp_Object before, after; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6762 int ignore; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6763 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6764 before = Foverlay_start (overlay); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6765 after = Foverlay_end (overlay); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6766 /* Record this as the current active region. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6767 fast_find_position (w, XFASTINT (before), |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6768 &dpyinfo->mouse_face_beg_col, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6769 &dpyinfo->mouse_face_beg_row, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6770 &dpyinfo->mouse_face_beg_x, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6771 &dpyinfo->mouse_face_beg_y, Qnil); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6772 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6773 dpyinfo->mouse_face_past_end |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6774 = !fast_find_position (w, XFASTINT (after), |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6775 &dpyinfo->mouse_face_end_col, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6776 &dpyinfo->mouse_face_end_row, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6777 &dpyinfo->mouse_face_end_x, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6778 &dpyinfo->mouse_face_end_y, Qnil); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6779 dpyinfo->mouse_face_window = window; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6780 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6781 dpyinfo->mouse_face_face_id |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6782 = face_at_buffer_position (w, pos, 0, 0, |
|
48025
77df00035231
(note_mouse_highlight): Don't use mouse-face if hidden.
Kim F. Storm <storm@cua.dk>
parents:
47992
diff
changeset
|
6783 &ignore, pos + 1, |
|
77df00035231
(note_mouse_highlight): Don't use mouse-face if hidden.
Kim F. Storm <storm@cua.dk>
parents:
47992
diff
changeset
|
6784 !dpyinfo->mouse_face_hidden); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6785 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6786 /* Display it as active. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6787 show_mouse_face (dpyinfo, DRAW_MOUSE_FACE); |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6788 cursor = 0; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6789 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6790 /* Handle the text property case. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6791 else if (! NILP (mouse_face) && BUFFERP (object)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6792 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6793 /* Find the range of text around this char that |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6794 should be active. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6795 Lisp_Object before, after, beginning, end; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6796 int ignore; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6797 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6798 beginning = Fmarker_position (w->start); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6799 end = make_number (BUF_Z (XBUFFER (object)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6800 - XFASTINT (w->window_end_pos)); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6801 before |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6802 = Fprevious_single_property_change (make_number (pos + 1), |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6803 Qmouse_face, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6804 object, beginning); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6805 after |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6806 = Fnext_single_property_change (position, Qmouse_face, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6807 object, end); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6808 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6809 /* Record this as the current active region. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6810 fast_find_position (w, XFASTINT (before), |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6811 &dpyinfo->mouse_face_beg_col, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6812 &dpyinfo->mouse_face_beg_row, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6813 &dpyinfo->mouse_face_beg_x, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6814 &dpyinfo->mouse_face_beg_y, Qnil); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6815 dpyinfo->mouse_face_past_end |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6816 = !fast_find_position (w, XFASTINT (after), |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6817 &dpyinfo->mouse_face_end_col, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6818 &dpyinfo->mouse_face_end_row, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6819 &dpyinfo->mouse_face_end_x, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6820 &dpyinfo->mouse_face_end_y, Qnil); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6821 dpyinfo->mouse_face_window = window; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6822 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6823 if (BUFFERP (object)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6824 dpyinfo->mouse_face_face_id |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6825 = face_at_buffer_position (w, pos, 0, 0, |
|
48025
77df00035231
(note_mouse_highlight): Don't use mouse-face if hidden.
Kim F. Storm <storm@cua.dk>
parents:
47992
diff
changeset
|
6826 &ignore, pos + 1, |
|
77df00035231
(note_mouse_highlight): Don't use mouse-face if hidden.
Kim F. Storm <storm@cua.dk>
parents:
47992
diff
changeset
|
6827 !dpyinfo->mouse_face_hidden); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6828 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6829 /* Display it as active. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6830 show_mouse_face (dpyinfo, DRAW_MOUSE_FACE); |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6831 cursor = 0; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6832 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6833 else if (!NILP (mouse_face) && STRINGP (object)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6834 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6835 Lisp_Object b, e; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6836 int ignore; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6837 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6838 b = Fprevious_single_property_change (make_number (pos + 1), |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6839 Qmouse_face, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6840 object, Qnil); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6841 e = Fnext_single_property_change (position, Qmouse_face, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6842 object, Qnil); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6843 if (NILP (b)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6844 b = make_number (0); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6845 if (NILP (e)) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
6846 e = make_number (SCHARS (object) - 1); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6847 fast_find_string_pos (w, XINT (b), object, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6848 &dpyinfo->mouse_face_beg_col, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6849 &dpyinfo->mouse_face_beg_row, |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6850 &dpyinfo->mouse_face_beg_x, |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6851 &dpyinfo->mouse_face_beg_y, 0); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6852 fast_find_string_pos (w, XINT (e), object, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6853 &dpyinfo->mouse_face_end_col, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6854 &dpyinfo->mouse_face_end_row, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6855 &dpyinfo->mouse_face_end_x, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6856 &dpyinfo->mouse_face_end_y, 1); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6857 dpyinfo->mouse_face_past_end = 0; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6858 dpyinfo->mouse_face_window = window; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6859 dpyinfo->mouse_face_face_id |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6860 = face_at_string_position (w, object, pos, 0, 0, 0, &ignore, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6861 glyph->face_id, 1); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6862 show_mouse_face (dpyinfo, DRAW_MOUSE_FACE); |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6863 cursor = 0; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6864 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6865 else if (STRINGP (object) && NILP (mouse_face)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6866 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6867 /* A string which doesn't have mouse-face, but |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6868 the text ``under'' it might have. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6869 struct glyph_row *r = MATRIX_ROW (w->current_matrix, vpos); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6870 int start = MATRIX_ROW_START_CHARPOS (r); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
6871 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6872 pos = string_buffer_position (w, object, start); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6873 if (pos > 0) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6874 mouse_face = get_char_property_and_overlay (make_number (pos), |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6875 Qmouse_face, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6876 w->buffer, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6877 &overlay); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6878 if (!NILP (mouse_face) && !NILP (overlay)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6879 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6880 Lisp_Object before = Foverlay_start (overlay); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6881 Lisp_Object after = Foverlay_end (overlay); |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
6882 int ignore; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6883 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6884 /* Note that we might not be able to find position |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6885 BEFORE in the glyph matrix if the overlay is |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6886 entirely covered by a `display' property. In |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6887 this case, we overshoot. So let's stop in |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6888 the glyph matrix before glyphs for OBJECT. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6889 fast_find_position (w, XFASTINT (before), |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6890 &dpyinfo->mouse_face_beg_col, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6891 &dpyinfo->mouse_face_beg_row, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6892 &dpyinfo->mouse_face_beg_x, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6893 &dpyinfo->mouse_face_beg_y, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6894 object); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
6895 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6896 dpyinfo->mouse_face_past_end |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6897 = !fast_find_position (w, XFASTINT (after), |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6898 &dpyinfo->mouse_face_end_col, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6899 &dpyinfo->mouse_face_end_row, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6900 &dpyinfo->mouse_face_end_x, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6901 &dpyinfo->mouse_face_end_y, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6902 Qnil); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6903 dpyinfo->mouse_face_window = window; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6904 dpyinfo->mouse_face_face_id |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6905 = face_at_buffer_position (w, pos, 0, 0, |
|
48025
77df00035231
(note_mouse_highlight): Don't use mouse-face if hidden.
Kim F. Storm <storm@cua.dk>
parents:
47992
diff
changeset
|
6906 &ignore, pos + 1, |
|
77df00035231
(note_mouse_highlight): Don't use mouse-face if hidden.
Kim F. Storm <storm@cua.dk>
parents:
47992
diff
changeset
|
6907 !dpyinfo->mouse_face_hidden); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6908 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6909 /* Display it as active. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6910 show_mouse_face (dpyinfo, DRAW_MOUSE_FACE); |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6911 cursor = 0; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6912 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6913 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6914 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6915 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6916 check_help_echo: |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6917 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6918 /* Look for a `help-echo' property. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6919 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6920 Lisp_Object help, overlay; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6921 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6922 /* Check overlays first. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6923 help = overlay = Qnil; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6924 for (i = noverlays - 1; i >= 0 && NILP (help); --i) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6925 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6926 overlay = overlay_vec[i]; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
6927 help = Foverlay_get (overlay, Qhelp_echo); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6928 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6929 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6930 if (!NILP (help)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6931 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6932 help_echo = help; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6933 help_echo_window = window; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6934 help_echo_object = overlay; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6935 help_echo_pos = pos; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6936 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6937 else |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6938 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6939 Lisp_Object object = glyph->object; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6940 int charpos = glyph->charpos; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6941 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6942 /* Try text properties. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6943 if (STRINGP (object) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6944 && charpos >= 0 |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
6945 && charpos < SCHARS (object)) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6946 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6947 help = Fget_text_property (make_number (charpos), |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6948 Qhelp_echo, object); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6949 if (NILP (help)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6950 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6951 /* If the string itself doesn't specify a help-echo, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6952 see if the buffer text ``under'' it does. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6953 struct glyph_row *r |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6954 = MATRIX_ROW (w->current_matrix, vpos); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6955 int start = MATRIX_ROW_START_CHARPOS (r); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6956 int pos = string_buffer_position (w, object, start); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6957 if (pos > 0) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6958 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6959 help = Fget_char_property (make_number (pos), |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6960 Qhelp_echo, w->buffer); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6961 if (!NILP (help)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6962 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6963 charpos = pos; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6964 object = w->buffer; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6965 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6966 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6967 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6968 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6969 else if (BUFFERP (object) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6970 && charpos >= BEGV |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6971 && charpos < ZV) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6972 help = Fget_text_property (make_number (charpos), Qhelp_echo, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6973 object); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
6974 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6975 if (!NILP (help)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6976 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6977 help_echo = help; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6978 help_echo_window = window; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6979 help_echo_object = object; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6980 help_echo_pos = charpos; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6981 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6982 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6983 } |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6984 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6985 BEGV = obegv; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6986 ZV = ozv; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6987 current_buffer = obuf; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6988 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6989 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
6990 set_cursor: |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6991 if (cursor) |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
6992 w32_define_cursor (FRAME_W32_WINDOW (f), cursor); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6993 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6994 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6995 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6996 redo_mouse_highlight () |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6997 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6998 if (!NILP (last_mouse_motion_frame) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
6999 && FRAME_LIVE_P (XFRAME (last_mouse_motion_frame))) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7000 note_mouse_highlight (XFRAME (last_mouse_motion_frame), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7001 LOWORD (last_mouse_motion_event.lParam), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7002 HIWORD (last_mouse_motion_event.lParam)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7003 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7004 |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7005 void |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7006 w32_define_cursor (window, cursor) |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7007 Window window; |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7008 Cursor cursor; |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7009 { |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7010 PostMessage (window, WM_EMACS_SETCURSOR, (WPARAM) cursor, 0); |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7011 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7012 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7013 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7014 /*********************************************************************** |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7015 Tool-bars |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7016 ***********************************************************************/ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7017 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7018 static int x_tool_bar_item P_ ((struct frame *, int, int, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7019 struct glyph **, int *, int *, int *)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7020 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7021 /* Tool-bar item index of the item on which a mouse button was pressed |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7022 or -1. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7023 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7024 static int last_tool_bar_item; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7025 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7026 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7027 /* Get information about the tool-bar item at position X/Y on frame F. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7028 Return in *GLYPH a pointer to the glyph of the tool-bar item in |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7029 the current matrix of the tool-bar window of F, or NULL if not |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7030 on a tool-bar item. Return in *PROP_IDX the index of the tool-bar |
|
33766
3488141db749
(x_tool_bar_item, w32_handle_tool_bar_click)
Gerd Moellmann <gerd@gnu.org>
parents:
33583
diff
changeset
|
7031 item in F->tool_bar_items. Value is |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7032 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7033 -1 if X/Y is not on a tool-bar item |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7034 0 if X/Y is on the same item that was highlighted before. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7035 1 otherwise. */ |
| 13434 | 7036 |
| 7037 static int | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7038 x_tool_bar_item (f, x, y, glyph, hpos, vpos, prop_idx) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7039 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7040 int x, y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7041 struct glyph **glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7042 int *hpos, *vpos, *prop_idx; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7043 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7044 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7045 struct window *w = XWINDOW (f->tool_bar_window); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7046 int area; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7047 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7048 /* Find the glyph under X/Y. */ |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7049 *glyph = x_y_to_hpos_vpos (w, x, y, hpos, vpos, &area, 0); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7050 if (*glyph == NULL) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7051 return -1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7052 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7053 /* Get the start of this tool-bar item's properties in |
|
33766
3488141db749
(x_tool_bar_item, w32_handle_tool_bar_click)
Gerd Moellmann <gerd@gnu.org>
parents:
33583
diff
changeset
|
7054 f->tool_bar_items. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7055 if (!tool_bar_item_info (f, *glyph, prop_idx)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7056 return -1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7057 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7058 /* Is mouse on the highlighted item? */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7059 if (EQ (f->tool_bar_window, dpyinfo->mouse_face_window) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7060 && *vpos >= dpyinfo->mouse_face_beg_row |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7061 && *vpos <= dpyinfo->mouse_face_end_row |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7062 && (*vpos > dpyinfo->mouse_face_beg_row |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7063 || *hpos >= dpyinfo->mouse_face_beg_col) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7064 && (*vpos < dpyinfo->mouse_face_end_row |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7065 || *hpos < dpyinfo->mouse_face_end_col |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7066 || dpyinfo->mouse_face_past_end)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7067 return 0; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7068 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7069 return 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7070 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7071 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7072 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
7073 /* Handle mouse button event on the tool-bar of frame F, at |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7074 frame-relative coordinates X/Y. EVENT_TYPE is either ButtionPress |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7075 or ButtonRelase. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7076 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7077 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7078 w32_handle_tool_bar_click (f, button_event) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7079 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7080 struct input_event *button_event; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7081 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7082 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7083 struct window *w = XWINDOW (f->tool_bar_window); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7084 int hpos, vpos, prop_idx; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7085 struct glyph *glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7086 Lisp_Object enabled_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7087 int x = XFASTINT (button_event->x); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7088 int y = XFASTINT (button_event->y); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7089 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7090 /* If not on the highlighted tool-bar item, return. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7091 frame_to_window_pixel_xy (w, &x, &y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7092 if (x_tool_bar_item (f, x, y, &glyph, &hpos, &vpos, &prop_idx) != 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7093 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7094 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7095 /* If item is disabled, do nothing. */ |
|
33766
3488141db749
(x_tool_bar_item, w32_handle_tool_bar_click)
Gerd Moellmann <gerd@gnu.org>
parents:
33583
diff
changeset
|
7096 enabled_p = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_ENABLED_P); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7097 if (NILP (enabled_p)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7098 return; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7099 |
|
44108
9b9674209839
(w32_handle_tool_bar_click): Detect up and down events
Jason Rumney <jasonr@gnu.org>
parents:
44095
diff
changeset
|
7100 if (button_event->modifiers & down_modifier) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7101 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7102 /* Show item in pressed state. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7103 show_mouse_face (dpyinfo, DRAW_IMAGE_SUNKEN); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7104 dpyinfo->mouse_face_image_state = DRAW_IMAGE_SUNKEN; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7105 last_tool_bar_item = prop_idx; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7106 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7107 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7108 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7109 Lisp_Object key, frame; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7110 struct input_event event; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7111 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7112 /* Show item in released state. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7113 show_mouse_face (dpyinfo, DRAW_IMAGE_RAISED); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7114 dpyinfo->mouse_face_image_state = DRAW_IMAGE_RAISED; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7115 |
|
33766
3488141db749
(x_tool_bar_item, w32_handle_tool_bar_click)
Gerd Moellmann <gerd@gnu.org>
parents:
33583
diff
changeset
|
7116 key = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_KEY); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7117 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7118 XSETFRAME (frame, f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7119 event.kind = TOOL_BAR_EVENT; |
|
30179
9c30c64ab61d
(w32_handle_tool_bar_click): Adapt to changes in
Gerd Moellmann <gerd@gnu.org>
parents:
30050
diff
changeset
|
7120 event.frame_or_window = frame; |
|
9c30c64ab61d
(w32_handle_tool_bar_click): Adapt to changes in
Gerd Moellmann <gerd@gnu.org>
parents:
30050
diff
changeset
|
7121 event.arg = frame; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7122 kbd_buffer_store_event (&event); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7123 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7124 event.kind = TOOL_BAR_EVENT; |
|
30179
9c30c64ab61d
(w32_handle_tool_bar_click): Adapt to changes in
Gerd Moellmann <gerd@gnu.org>
parents:
30050
diff
changeset
|
7125 event.frame_or_window = frame; |
|
9c30c64ab61d
(w32_handle_tool_bar_click): Adapt to changes in
Gerd Moellmann <gerd@gnu.org>
parents:
30050
diff
changeset
|
7126 event.arg = key; |
|
44108
9b9674209839
(w32_handle_tool_bar_click): Detect up and down events
Jason Rumney <jasonr@gnu.org>
parents:
44095
diff
changeset
|
7127 /* The keyboard buffer doesn't like the up modifier being set. */ |
|
9b9674209839
(w32_handle_tool_bar_click): Detect up and down events
Jason Rumney <jasonr@gnu.org>
parents:
44095
diff
changeset
|
7128 event.modifiers = button_event->modifiers & ~up_modifier; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7129 kbd_buffer_store_event (&event); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7130 last_tool_bar_item = -1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7131 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7132 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7133 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7134 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
7135 /* Possibly highlight a tool-bar item on frame F when mouse moves to |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7136 tool-bar window-relative coordinates X/Y. Called from |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7137 note_mouse_highlight. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7138 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7139 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7140 note_tool_bar_highlight (f, x, y) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7141 struct frame *f; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7142 int x, y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7143 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7144 Lisp_Object window = f->tool_bar_window; |
| 13434 | 7145 struct window *w = XWINDOW (window); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7146 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7147 int hpos, vpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7148 struct glyph *glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7149 struct glyph_row *row; |
| 13434 | 7150 int i; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7151 Lisp_Object enabled_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7152 int prop_idx; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7153 enum draw_glyphs_face draw = DRAW_IMAGE_RAISED; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7154 int mouse_down_p, rc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7155 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7156 /* Function note_mouse_highlight is called with negative x(y |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7157 values when mouse moves outside of the frame. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7158 if (x <= 0 || y <= 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7159 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7160 clear_mouse_face (dpyinfo); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7161 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7162 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7163 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7164 rc = x_tool_bar_item (f, x, y, &glyph, &hpos, &vpos, &prop_idx); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7165 if (rc < 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7166 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7167 /* Not on tool-bar item. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7168 clear_mouse_face (dpyinfo); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7169 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7170 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7171 else if (rc == 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7172 /* On same tool-bar item as before. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7173 goto set_help_echo; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7174 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7175 clear_mouse_face (dpyinfo); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7176 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7177 /* Mouse is down, but on different tool-bar item? */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7178 mouse_down_p = (dpyinfo->grabbed |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7179 && f == last_mouse_frame |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7180 && FRAME_LIVE_P (f)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7181 if (mouse_down_p |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7182 && last_tool_bar_item != prop_idx) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7183 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7184 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7185 dpyinfo->mouse_face_image_state = DRAW_NORMAL_TEXT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7186 draw = mouse_down_p ? DRAW_IMAGE_SUNKEN : DRAW_IMAGE_RAISED; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7187 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7188 /* If tool-bar item is not enabled, don't highlight it. */ |
|
33766
3488141db749
(x_tool_bar_item, w32_handle_tool_bar_click)
Gerd Moellmann <gerd@gnu.org>
parents:
33583
diff
changeset
|
7189 enabled_p = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_ENABLED_P); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7190 if (!NILP (enabled_p)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7191 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7192 /* Compute the x-position of the glyph. In front and past the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7193 image is a space. We include this is the highlighted area. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7194 row = MATRIX_ROW (w->current_matrix, vpos); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7195 for (i = x = 0; i < hpos; ++i) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7196 x += row->glyphs[TEXT_AREA][i].pixel_width; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7197 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7198 /* Record this as the current active region. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7199 dpyinfo->mouse_face_beg_col = hpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7200 dpyinfo->mouse_face_beg_row = vpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7201 dpyinfo->mouse_face_beg_x = x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7202 dpyinfo->mouse_face_beg_y = row->y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7203 dpyinfo->mouse_face_past_end = 0; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7204 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7205 dpyinfo->mouse_face_end_col = hpos + 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7206 dpyinfo->mouse_face_end_row = vpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7207 dpyinfo->mouse_face_end_x = x + glyph->pixel_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7208 dpyinfo->mouse_face_end_y = row->y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7209 dpyinfo->mouse_face_window = window; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7210 dpyinfo->mouse_face_face_id = TOOL_BAR_FACE_ID; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7211 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7212 /* Display it as active. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7213 show_mouse_face (dpyinfo, draw); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7214 dpyinfo->mouse_face_image_state = draw; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7215 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7216 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7217 set_help_echo: |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7218 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7219 /* Set help_echo to a help string.to display for this tool-bar item. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7220 w32_read_socket does the rest. */ |
|
30988
a69a2ac4345b
(help_echo_window): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
30730
diff
changeset
|
7221 help_echo_object = help_echo_window = Qnil; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7222 help_echo_pos = -1; |
|
33766
3488141db749
(x_tool_bar_item, w32_handle_tool_bar_click)
Gerd Moellmann <gerd@gnu.org>
parents:
33583
diff
changeset
|
7223 help_echo = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_HELP); |
|
30050
ed1979c6dfb9
* xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
29321
diff
changeset
|
7224 if (NILP (help_echo)) |
|
33766
3488141db749
(x_tool_bar_item, w32_handle_tool_bar_click)
Gerd Moellmann <gerd@gnu.org>
parents:
33583
diff
changeset
|
7225 help_echo = AREF (f->tool_bar_items, prop_idx + TOOL_BAR_ITEM_CAPTION); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7226 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7227 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
7228 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7229 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7230 /* Find the glyph matrix position of buffer position CHARPOS in window |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7231 *W. HPOS, *VPOS, *X, and *Y are set to the positions found. W's |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7232 current glyphs must be up to date. If CHARPOS is above window |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7233 start return (0, 0, 0, 0). If CHARPOS is after end of W, return end |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7234 of last line in W. In the row containing CHARPOS, stop before glyphs |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7235 having STOP as object. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7236 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7237 #if 0 /* This is a version of fast_find_position that's more correct |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7238 in the presence of hscrolling, for example. I didn't install |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7239 it right away because the problem fixed is minor, it failed |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7240 in 20.x as well, and I think it's too risky to install |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7241 so near the release of 21.1. 2001-09-25 gerd. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7242 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7243 static int |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7244 fast_find_position (w, charpos, hpos, vpos, x, y, stop) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7245 struct window *w; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7246 int charpos; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7247 int *hpos, *vpos, *x, *y; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7248 Lisp_Object stop; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7249 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7250 struct glyph_row *row, *first; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7251 struct glyph *glyph, *end; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7252 int i, past_end = 0; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7253 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7254 first = MATRIX_FIRST_TEXT_ROW (w->current_matrix); |
|
40245
9175d0c189f4
(fast_find_position): Call row_containing_pos
Gerd Moellmann <gerd@gnu.org>
parents:
40157
diff
changeset
|
7255 row = row_containing_pos (w, charpos, first, NULL, 0); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7256 if (row == NULL) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7257 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7258 if (charpos < MATRIX_ROW_START_CHARPOS (first)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7259 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7260 *x = *y = *hpos = *vpos = 0; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7261 return 0; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7262 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7263 else |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7264 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7265 row = MATRIX_ROW (w->current_matrix, XFASTINT (w->window_end_vpos)); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7266 past_end = 1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7267 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7268 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7269 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7270 *x = row->x; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7271 *y = row->y; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7272 *vpos = MATRIX_ROW_VPOS (row, w->current_matrix); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7273 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7274 glyph = row->glyphs[TEXT_AREA]; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7275 end = glyph + row->used[TEXT_AREA]; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7276 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7277 /* Skip over glyphs not having an object at the start of the row. |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7278 These are special glyphs like truncation marks on terminal |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7279 frames. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7280 if (row->displays_text_p) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7281 while (glyph < end |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7282 && INTEGERP (glyph->object) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7283 && !EQ (stop, glyph->object) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7284 && glyph->charpos < 0) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7285 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7286 *x += glyph->pixel_width; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7287 ++glyph; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7288 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7289 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7290 while (glyph < end |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7291 && !INTEGERP (glyph->object) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7292 && !EQ (stop, glyph->object) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7293 && (!BUFFERP (glyph->object) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7294 || glyph->charpos < charpos)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7295 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7296 *x += glyph->pixel_width; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7297 ++glyph; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7298 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7299 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7300 *hpos = glyph - row->glyphs[TEXT_AREA]; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7301 return past_end; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7302 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7303 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7304 #else /* not 0 */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7305 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7306 static int |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7307 fast_find_position (w, pos, hpos, vpos, x, y, stop) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7308 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7309 int pos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7310 int *hpos, *vpos, *x, *y; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7311 Lisp_Object stop; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7312 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7313 int i; |
| 13434 | 7314 int lastcol; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7315 int maybe_next_line_p = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7316 int line_start_position; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7317 int yb = window_text_bottom_y (w); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7318 struct glyph_row *row, *best_row; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7319 int row_vpos, best_row_vpos; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7320 int current_x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7321 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7322 row = best_row = MATRIX_FIRST_TEXT_ROW (w->current_matrix); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7323 row_vpos = best_row_vpos = MATRIX_ROW_VPOS (row, w->current_matrix); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7324 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7325 while (row->y < yb) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7326 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7327 if (row->used[TEXT_AREA]) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7328 line_start_position = row->glyphs[TEXT_AREA]->charpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7329 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7330 line_start_position = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7331 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7332 if (line_start_position > pos) |
| 13434 | 7333 break; |
| 7334 /* If the position sought is the end of the buffer, | |
| 7335 don't include the blank lines at the bottom of the window. */ | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7336 else if (line_start_position == pos |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7337 && pos == BUF_ZV (XBUFFER (w->buffer))) |
| 13434 | 7338 { |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7339 maybe_next_line_p = 1; |
| 13434 | 7340 break; |
| 7341 } | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7342 else if (line_start_position > 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7343 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7344 best_row = row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7345 best_row_vpos = row_vpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7346 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7347 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
7348 if (row->y + row->height >= yb) |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
7349 break; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
7350 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7351 ++row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7352 ++row_vpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7353 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7354 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7355 /* Find the right column within BEST_ROW. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7356 lastcol = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7357 current_x = best_row->x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7358 for (i = 0; i < best_row->used[TEXT_AREA]; i++) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7359 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7360 struct glyph *glyph = best_row->glyphs[TEXT_AREA] + i; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7361 int charpos = glyph->charpos; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7362 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7363 if (BUFFERP (glyph->object)) |
| 13434 | 7364 { |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7365 if (charpos == pos) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7366 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7367 *hpos = i; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7368 *vpos = best_row_vpos; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7369 *x = current_x; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7370 *y = best_row->y; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7371 return 1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7372 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7373 else if (charpos > pos) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7374 break; |
| 13434 | 7375 } |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7376 else if (EQ (glyph->object, stop)) |
| 13434 | 7377 break; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7378 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7379 if (charpos > 0) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7380 lastcol = i; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7381 current_x += glyph->pixel_width; |
| 13434 | 7382 } |
| 7383 | |
| 7384 /* If we're looking for the end of the buffer, | |
| 7385 and we didn't find it in the line we scanned, | |
| 7386 use the start of the following line. */ | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7387 if (maybe_next_line_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7388 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7389 ++best_row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7390 ++best_row_vpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7391 lastcol = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7392 current_x = best_row->x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7393 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7394 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7395 *vpos = best_row_vpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7396 *hpos = lastcol + 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7397 *x = current_x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7398 *y = best_row->y; |
| 13434 | 7399 return 0; |
| 7400 } | |
| 7401 | |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7402 #endif /* not 0 */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7403 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7404 |
| 42675 | 7405 /* Find the position of the glyph for position POS in OBJECT in |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7406 window W's current matrix, and return in *X/*Y the pixel |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7407 coordinates, and return in *HPOS/*VPOS the column/row of the glyph. |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7408 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7409 RIGHT_P non-zero means return the position of the right edge of the |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7410 glyph, RIGHT_P zero means return the left edge position. |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7411 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7412 If no glyph for POS exists in the matrix, return the position of |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7413 the glyph with the next smaller position that is in the matrix, if |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7414 RIGHT_P is zero. If RIGHT_P is non-zero, and no glyph for POS |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7415 exists in the matrix, return the position of the glyph with the |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7416 next larger position in OBJECT. |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7417 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7418 Value is non-zero if a glyph was found. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7419 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7420 static int |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7421 fast_find_string_pos (w, pos, object, hpos, vpos, x, y, right_p) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7422 struct window *w; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7423 int pos; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7424 Lisp_Object object; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7425 int *hpos, *vpos, *x, *y; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7426 int right_p; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7427 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7428 int yb = window_text_bottom_y (w); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7429 struct glyph_row *r; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7430 struct glyph *best_glyph = NULL; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7431 struct glyph_row *best_row = NULL; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7432 int best_x = 0; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7433 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7434 for (r = MATRIX_FIRST_TEXT_ROW (w->current_matrix); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7435 r->enabled_p && r->y < yb; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7436 ++r) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7437 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7438 struct glyph *g = r->glyphs[TEXT_AREA]; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7439 struct glyph *e = g + r->used[TEXT_AREA]; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7440 int gx; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7441 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7442 for (gx = r->x; g < e; gx += g->pixel_width, ++g) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7443 if (EQ (g->object, object)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7444 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7445 if (g->charpos == pos) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7446 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7447 best_glyph = g; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7448 best_x = gx; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7449 best_row = r; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7450 goto found; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7451 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7452 else if (best_glyph == NULL |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7453 || ((abs (g->charpos - pos) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7454 < abs (best_glyph->charpos - pos)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7455 && (right_p |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7456 ? g->charpos < pos |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7457 : g->charpos > pos))) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7458 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7459 best_glyph = g; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7460 best_x = gx; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7461 best_row = r; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7462 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7463 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7464 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7465 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7466 found: |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7467 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7468 if (best_glyph) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7469 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7470 *x = best_x; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7471 *hpos = best_glyph - best_row->glyphs[TEXT_AREA]; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7472 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7473 if (right_p) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7474 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7475 *x += best_glyph->pixel_width; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7476 ++*hpos; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7477 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7478 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7479 *y = best_row->y; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7480 *vpos = best_row - w->current_matrix->rows; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7481 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7482 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7483 return best_glyph != NULL; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7484 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7485 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7486 |
| 13434 | 7487 /* Display the active region described by mouse_face_* |
| 7488 in its mouse-face if HL > 0, in its normal face if HL = 0. */ | |
| 7489 | |
| 7490 static void | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7491 show_mouse_face (dpyinfo, draw) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
7492 struct w32_display_info *dpyinfo; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7493 enum draw_glyphs_face draw; |
| 13434 | 7494 { |
| 7495 struct window *w = XWINDOW (dpyinfo->mouse_face_window); | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7496 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7497 |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7498 if (/* If window is in the process of being destroyed, don't bother |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7499 to do anything. */ |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7500 w->current_matrix != NULL |
|
43373
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
7501 /* Don't update mouse highlight if hidden */ |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
7502 && (draw != DRAW_MOUSE_FACE || !dpyinfo->mouse_face_hidden) |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7503 /* Recognize when we are called to operate on rows that don't exist |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7504 anymore. This can happen when a window is split. */ |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7505 && dpyinfo->mouse_face_end_row < w->current_matrix->nrows) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7506 { |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7507 int phys_cursor_on_p = w->phys_cursor_on_p; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7508 struct glyph_row *row, *first, *last; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7509 |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7510 first = MATRIX_ROW (w->current_matrix, dpyinfo->mouse_face_beg_row); |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7511 last = MATRIX_ROW (w->current_matrix, dpyinfo->mouse_face_end_row); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7512 |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7513 for (row = first; row <= last && row->enabled_p; ++row) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7514 { |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7515 int start_hpos, end_hpos, start_x; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7516 |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7517 /* For all but the first row, the highlight starts at column 0. */ |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7518 if (row == first) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7519 { |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7520 start_hpos = dpyinfo->mouse_face_beg_col; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7521 start_x = dpyinfo->mouse_face_beg_x; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7522 } |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7523 else |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7524 { |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7525 start_hpos = 0; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7526 start_x = 0; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7527 } |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7528 |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7529 if (row == last) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7530 end_hpos = dpyinfo->mouse_face_end_col; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7531 else |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7532 end_hpos = row->used[TEXT_AREA]; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7533 |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7534 if (end_hpos > start_hpos) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7535 { |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7536 x_draw_glyphs (w, start_x, row, TEXT_AREA, |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7537 start_hpos, end_hpos, draw, 0); |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7538 |
|
42538
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
7539 row->mouse_face_p |
|
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
7540 = draw == DRAW_MOUSE_FACE || draw == DRAW_IMAGE_RAISED; |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7541 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7542 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7543 |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7544 /* When we've written over the cursor, arrange for it to |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7545 be displayed again. */ |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7546 if (phys_cursor_on_p && !w->phys_cursor_on_p) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7547 x_display_cursor (w, 1, |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7548 w->phys_cursor.hpos, w->phys_cursor.vpos, |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7549 w->phys_cursor.x, w->phys_cursor.y); |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7550 } |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
7551 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7552 /* Change the mouse cursor. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7553 if (draw == DRAW_NORMAL_TEXT) |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7554 w32_define_cursor (FRAME_W32_WINDOW (f), |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7555 f->output_data.w32->text_cursor); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7556 else if (draw == DRAW_MOUSE_FACE) |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7557 w32_define_cursor (FRAME_W32_WINDOW (f), |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7558 f->output_data.w32->hand_cursor); |
| 13434 | 7559 else |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7560 w32_define_cursor (FRAME_W32_WINDOW (f), |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7561 f->output_data.w32->nontext_cursor); |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
7562 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7563 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7564 |
| 13434 | 7565 /* Clear out the mouse-highlighted active region. |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
7566 Redraw it un-highlighted first. */ |
| 13434 | 7567 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7568 static int |
| 13434 | 7569 clear_mouse_face (dpyinfo) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
7570 struct w32_display_info *dpyinfo; |
| 13434 | 7571 { |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7572 int cleared = 0; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7573 |
| 13434 | 7574 if (! NILP (dpyinfo->mouse_face_window)) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7575 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7576 show_mouse_face (dpyinfo, DRAW_NORMAL_TEXT); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7577 cleared = 1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7578 } |
| 13434 | 7579 |
| 7580 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; | |
| 7581 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; | |
| 7582 dpyinfo->mouse_face_window = Qnil; | |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7583 dpyinfo->mouse_face_overlay = Qnil; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7584 return cleared; |
| 13434 | 7585 } |
|
24827
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7586 |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7587 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7588 /* Clear any mouse-face on window W. This function is part of the |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7589 redisplay interface, and is called from try_window_id and similar |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7590 functions to ensure the mouse-highlight is off. */ |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7591 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7592 static void |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7593 x_clear_mouse_face (w) |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7594 struct window *w; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7595 { |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7596 struct w32_display_info *dpyinfo |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7597 = FRAME_W32_DISPLAY_INFO (XFRAME (w->frame)); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7598 Lisp_Object window; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7599 |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
7600 BLOCK_INPUT; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7601 XSETWINDOW (window, w); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7602 if (EQ (window, dpyinfo->mouse_face_window)) |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7603 clear_mouse_face (dpyinfo); |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
7604 UNBLOCK_INPUT; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7605 } |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7606 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7607 |
|
24827
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7608 /* Just discard the mouse face information for frame F, if any. |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7609 This is used when the size of F is changed. */ |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7610 |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7611 void |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7612 cancel_mouse_face (f) |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7613 FRAME_PTR f; |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7614 { |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7615 Lisp_Object window; |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7616 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7617 |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7618 window = dpyinfo->mouse_face_window; |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7619 if (! NILP (window) && XFRAME (XWINDOW (window)->frame) == f) |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7620 { |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7621 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7622 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7623 dpyinfo->mouse_face_window = Qnil; |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7624 } |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
7625 } |
| 13434 | 7626 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
7627 static struct scroll_bar *x_window_to_scroll_bar (); |
| 13434 | 7628 static void x_scroll_bar_report_motion (); |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
7629 static void x_check_fullscreen P_ ((struct frame *)); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
7630 static void x_check_fullscreen_move P_ ((struct frame *)); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7631 static int glyph_rect P_ ((struct frame *f, int, int, RECT *)); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7632 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7633 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7634 /* Try to determine frame pixel position and size of the glyph under |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7635 frame pixel coordinates X/Y on frame F . Return the position and |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7636 size in *RECT. Value is non-zero if we could compute these |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7637 values. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7638 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7639 static int |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7640 glyph_rect (f, x, y, rect) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7641 struct frame *f; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7642 int x, y; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7643 RECT *rect; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7644 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7645 Lisp_Object window; |
|
43408
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7646 int part; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7647 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7648 window = window_from_coordinates (f, x, y, &part, 0); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7649 if (!NILP (window)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7650 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7651 struct window *w = XWINDOW (window); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7652 struct glyph_row *r = MATRIX_FIRST_TEXT_ROW (w->current_matrix); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7653 struct glyph_row *end = r + w->current_matrix->nrows - 1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7654 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7655 frame_to_window_pixel_xy (w, &x, &y); |
|
43408
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7656 |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7657 for (; r < end && r->enabled_p; ++r) |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7658 if (r->y <= y && r->y + r->height > y) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7659 { |
|
43408
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7660 /* Found the row at y. */ |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7661 struct glyph *g = r->glyphs[TEXT_AREA]; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7662 struct glyph *end = g + r->used[TEXT_AREA]; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7663 int gx; |
|
43408
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7664 |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7665 rect->top = WINDOW_TO_FRAME_PIXEL_Y (w, r->y); |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7666 rect->bottom = rect->top + r->height; |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7667 |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7668 if (x < r->x) |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7669 { |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7670 /* x is to the left of the first glyph in the row. */ |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7671 rect->left = XINT (w->left); |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7672 rect->right = WINDOW_TO_FRAME_PIXEL_X (w, r->x); |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7673 return 1; |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7674 } |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7675 |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7676 for (gx = r->x; g < end; gx += g->pixel_width, ++g) |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7677 if (gx <= x && gx + g->pixel_width > x) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7678 { |
|
43408
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7679 /* x is on a glyph. */ |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7680 rect->left = WINDOW_TO_FRAME_PIXEL_X (w, gx); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7681 rect->right = rect->left + g->pixel_width; |
|
43408
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7682 return 1; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7683 } |
|
43408
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7684 |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7685 /* x is to the right of the last glyph in the row. */ |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7686 rect->left = WINDOW_TO_FRAME_PIXEL_X (w, gx); |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7687 rect->right = XINT (w->left) + XINT (w->width); |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7688 return 1; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7689 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7690 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7691 |
|
43408
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7692 /* The y is not on any row. */ |
|
5710b2d512a9
(glyph_rect): Determine the row and glyph more precisely.
Jason Rumney <jasonr@gnu.org>
parents:
43396
diff
changeset
|
7693 return 0; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7694 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7695 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7696 /* Record the position of the mouse in last_mouse_glyph. */ |
|
40153
ccd2ee0384ff
Fix formatting for new function.
Jason Rumney <jasonr@gnu.org>
parents:
40137
diff
changeset
|
7697 static void |
|
ccd2ee0384ff
Fix formatting for new function.
Jason Rumney <jasonr@gnu.org>
parents:
40137
diff
changeset
|
7698 remember_mouse_glyph (f1, gx, gy) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7699 struct frame * f1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7700 int gx, gy; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7701 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7702 if (!glyph_rect (f1, gx, gy, &last_mouse_glyph)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7703 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7704 int width = FRAME_SMALLEST_CHAR_WIDTH (f1); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7705 int height = FRAME_SMALLEST_FONT_HEIGHT (f1); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7706 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7707 /* Arrange for the division in PIXEL_TO_CHAR_COL etc. to |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7708 round down even for negative values. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7709 if (gx < 0) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7710 gx -= width - 1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7711 if (gy < 0) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7712 gy -= height - 1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7713 #if 0 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7714 /* This was the original code from XTmouse_position, but it seems |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7715 to give the position of the glyph diagonally next to the one |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7716 the mouse is over. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7717 gx = (gx + width - 1) / width * width; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7718 gy = (gy + height - 1) / height * height; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7719 #else |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7720 gx = gx / width * width; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7721 gy = gy / height * height; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7722 #endif |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7723 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7724 last_mouse_glyph.left = gx; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7725 last_mouse_glyph.top = gy; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7726 last_mouse_glyph.right = gx + width; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7727 last_mouse_glyph.bottom = gy + height; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7728 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7729 } |
| 13434 | 7730 |
| 7731 /* Return the current position of the mouse. | |
| 7732 *fp should be a frame which indicates which display to ask about. | |
| 7733 | |
| 7734 If the mouse movement started in a scroll bar, set *fp, *bar_window, | |
| 7735 and *part to the frame, window, and scroll bar part that the mouse | |
| 7736 is over. Set *x and *y to the portion and whole of the mouse's | |
| 7737 position on the scroll bar. | |
| 7738 | |
| 7739 If the mouse movement started elsewhere, set *fp to the frame the | |
| 7740 mouse is on, *bar_window to nil, and *x and *y to the character cell | |
| 7741 the mouse is over. | |
| 7742 | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
7743 Set *time to the server time-stamp for the time at which the mouse |
| 13434 | 7744 was at this position. |
| 7745 | |
| 7746 Don't store anything if we don't have a valid set of values to report. | |
| 7747 | |
| 7748 This clears the mouse_moved flag, so we can wait for the next mouse | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
7749 movement. */ |
| 13434 | 7750 |
| 7751 static void | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
7752 w32_mouse_position (fp, insist, bar_window, part, x, y, time) |
| 13434 | 7753 FRAME_PTR *fp; |
| 7754 int insist; | |
| 7755 Lisp_Object *bar_window; | |
| 7756 enum scroll_bar_part *part; | |
| 7757 Lisp_Object *x, *y; | |
| 7758 unsigned long *time; | |
| 7759 { | |
| 7760 FRAME_PTR f1; | |
| 7761 | |
| 7762 BLOCK_INPUT; | |
| 7763 | |
|
20179
b4fe0e8ac819
(w32_mouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents:
19713
diff
changeset
|
7764 if (! NILP (last_mouse_scroll_bar) && insist == 0) |
| 13434 | 7765 x_scroll_bar_report_motion (fp, bar_window, part, x, y, time); |
| 7766 else | |
| 7767 { | |
| 7768 POINT pt; | |
| 7769 | |
| 7770 Lisp_Object frame, tail; | |
| 7771 | |
| 7772 /* Clear the mouse-moved flag for every frame on this display. */ | |
| 7773 FOR_EACH_FRAME (tail, frame) | |
| 7774 XFRAME (frame)->mouse_moved = 0; | |
| 7775 | |
| 7776 last_mouse_scroll_bar = Qnil; | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7777 |
| 13434 | 7778 GetCursorPos (&pt); |
| 7779 | |
| 7780 /* Now we have a position on the root; find the innermost window | |
| 7781 containing the pointer. */ | |
| 7782 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
7783 if (FRAME_W32_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame |
| 13434 | 7784 && FRAME_LIVE_P (last_mouse_frame)) |
| 7785 { | |
|
24752
80c46fd667da
(w32_read_socket): Reset the grabbed flag when a frame gains or
Andrew Innes <andrewi@gnu.org>
parents:
24733
diff
changeset
|
7786 /* If mouse was grabbed on a frame, give coords for that frame |
|
80c46fd667da
(w32_read_socket): Reset the grabbed flag when a frame gains or
Andrew Innes <andrewi@gnu.org>
parents:
24733
diff
changeset
|
7787 even if the mouse is now outside it. */ |
| 13434 | 7788 f1 = last_mouse_frame; |
| 7789 } | |
| 7790 else | |
| 7791 { | |
|
24752
80c46fd667da
(w32_read_socket): Reset the grabbed flag when a frame gains or
Andrew Innes <andrewi@gnu.org>
parents:
24733
diff
changeset
|
7792 /* Is window under mouse one of our frames? */ |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7793 f1 = x_any_window_to_frame (FRAME_W32_DISPLAY_INFO (*fp), |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
7794 WindowFromPoint (pt)); |
| 13434 | 7795 } |
| 7796 | |
| 7797 /* If not, is it one of our scroll bars? */ | |
| 7798 if (! f1) | |
| 7799 { | |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
7800 struct scroll_bar *bar |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
7801 = x_window_to_scroll_bar (WindowFromPoint (pt)); |
| 13434 | 7802 |
| 7803 if (bar) | |
| 7804 { | |
| 7805 f1 = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); | |
| 7806 } | |
| 7807 } | |
| 7808 | |
|
20179
b4fe0e8ac819
(w32_mouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents:
19713
diff
changeset
|
7809 if (f1 == 0 && insist > 0) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7810 f1 = SELECTED_FRAME (); |
| 13434 | 7811 |
| 7812 if (f1) | |
| 7813 { | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7814 /* Ok, we found a frame. Store all the values. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7815 last_mouse_glyph is a rectangle used to reduce the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7816 generation of mouse events. To not miss any motion |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7817 events, we must divide the frame into rectangles of the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7818 size of the smallest character that could be displayed |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7819 on it, i.e. into the same rectangles that matrices on |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7820 the frame are divided into. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7821 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7822 #if OLD_REDISPLAY_CODE |
| 13434 | 7823 int ignore1, ignore2; |
| 7824 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
7825 ScreenToClient (FRAME_W32_WINDOW (f1), &pt); |
| 13434 | 7826 |
| 7827 pixel_to_glyph_coords (f1, pt.x, pt.y, &ignore1, &ignore2, | |
| 7828 &last_mouse_glyph, | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
7829 FRAME_W32_DISPLAY_INFO (f1)->grabbed |
| 13434 | 7830 || insist); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7831 #else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7832 ScreenToClient (FRAME_W32_WINDOW (f1), &pt); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
7833 remember_mouse_glyph (f1, pt.x, pt.y); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7834 #endif |
| 13434 | 7835 |
| 7836 *bar_window = Qnil; | |
| 7837 *part = 0; | |
| 7838 *fp = f1; | |
| 7839 XSETINT (*x, pt.x); | |
| 7840 XSETINT (*y, pt.y); | |
| 7841 *time = last_mouse_movement_time; | |
| 7842 } | |
| 7843 } | |
| 7844 } | |
| 7845 | |
| 7846 UNBLOCK_INPUT; | |
| 7847 } | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7848 |
| 13434 | 7849 |
| 7850 /* Scroll bar support. */ | |
| 7851 | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7852 /* Given a window ID, find the struct scroll_bar which manages it. |
| 13434 | 7853 This can be called in GC, so we have to make sure to strip off mark |
| 7854 bits. */ | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
7855 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
7856 static struct scroll_bar * |
| 13434 | 7857 x_window_to_scroll_bar (window_id) |
| 7858 Window window_id; | |
| 7859 { | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7860 Lisp_Object tail; |
| 13434 | 7861 |
| 7862 for (tail = Vframe_list; | |
| 7863 XGCTYPE (tail) == Lisp_Cons; | |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25236
diff
changeset
|
7864 tail = XCDR (tail)) |
| 13434 | 7865 { |
| 7866 Lisp_Object frame, bar, condemned; | |
| 7867 | |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25236
diff
changeset
|
7868 frame = XCAR (tail); |
| 13434 | 7869 /* All elements of Vframe_list should be frames. */ |
| 7870 if (! GC_FRAMEP (frame)) | |
| 7871 abort (); | |
| 7872 | |
| 7873 /* Scan this frame's scroll bar list for a scroll bar with the | |
| 7874 right window ID. */ | |
| 7875 condemned = FRAME_CONDEMNED_SCROLL_BARS (XFRAME (frame)); | |
| 7876 for (bar = FRAME_SCROLL_BARS (XFRAME (frame)); | |
| 7877 /* This trick allows us to search both the ordinary and | |
| 7878 condemned scroll bar lists with one loop. */ | |
| 7879 ! GC_NILP (bar) || (bar = condemned, | |
| 7880 condemned = Qnil, | |
| 7881 ! GC_NILP (bar)); | |
| 7882 bar = XSCROLL_BAR (bar)->next) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
7883 if (SCROLL_BAR_W32_WINDOW (XSCROLL_BAR (bar)) == window_id) |
| 13434 | 7884 return XSCROLL_BAR (bar); |
| 7885 } | |
| 7886 | |
| 7887 return 0; | |
| 7888 } | |
| 7889 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7890 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7891 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7892 /* Set the thumb size and position of scroll bar BAR. We are currently |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7893 displaying PORTION out of a whole WHOLE, and our position POSITION. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7894 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7895 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7896 w32_set_scroll_bar_thumb (bar, portion, position, whole) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7897 struct scroll_bar *bar; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7898 int portion, position, whole; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7899 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7900 Window w = SCROLL_BAR_W32_WINDOW (bar); |
|
35984
0080b799e901
(w32_set_scroll_bar_thumb): Use `double' for `range' to avoid overflow.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
35678
diff
changeset
|
7901 double range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7902 int sb_page, sb_pos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7903 BOOL draggingp = !NILP (bar->dragging) ? TRUE : FALSE; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7904 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7905 if (whole) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7906 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7907 /* Position scroll bar at rock bottom if the bottom of the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7908 buffer is visible. This avoids shinking the thumb away |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7909 to nothing if it is held at the bottom of the buffer. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7910 if (position + portion >= whole) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7911 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7912 sb_page = range * (whole - position) / whole |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7913 + VERTICAL_SCROLL_BAR_MIN_HANDLE; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7914 sb_pos = range; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7915 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7916 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7917 sb_page = portion * range / whole + VERTICAL_SCROLL_BAR_MIN_HANDLE; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7918 sb_pos = position * range / whole; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7919 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7920 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7921 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7922 sb_page = range; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7923 sb_pos = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7924 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7925 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7926 BLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7927 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7928 if (pfnSetScrollInfo) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7929 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7930 SCROLLINFO si; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7931 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7932 si.cbSize = sizeof (si); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7933 /* Only update page size if currently dragging, to reduce |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7934 flicker effects. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7935 if (draggingp) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7936 si.fMask = SIF_PAGE; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7937 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7938 si.fMask = SIF_PAGE | SIF_POS; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7939 si.nPage = sb_page; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7940 si.nPos = sb_pos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7941 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7942 pfnSetScrollInfo (w, SB_CTL, &si, !draggingp); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7943 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7944 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7945 SetScrollPos (w, SB_CTL, sb_pos, !draggingp); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7946 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7947 UNBLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7948 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7949 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7950 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7951 /************************************************************************ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7952 Scroll bars, general |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
7953 ************************************************************************/ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7954 |
|
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7955 HWND |
| 13434 | 7956 my_create_scrollbar (f, bar) |
| 7957 struct frame * f; | |
| 7958 struct scroll_bar * bar; | |
| 7959 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7960 return (HWND) SendMessage (FRAME_W32_WINDOW (f), |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
7961 WM_EMACS_CREATESCROLLBAR, (WPARAM) f, |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7962 (LPARAM) bar); |
| 13434 | 7963 } |
| 7964 | |
|
42919
2a546583564f
(x_update_window_begin): Only hide caret if
Jason Rumney <jasonr@gnu.org>
parents:
42864
diff
changeset
|
7965 /*#define ATTACH_THREADS*/ |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7966 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7967 BOOL |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7968 my_show_window (FRAME_PTR f, HWND hwnd, int how) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7969 { |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7970 #ifndef ATTACH_THREADS |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7971 return SendMessage (FRAME_W32_WINDOW (f), WM_EMACS_SHOWWINDOW, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7972 (WPARAM) hwnd, (LPARAM) how); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7973 #else |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7974 return ShowWindow (hwnd, how); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7975 #endif |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7976 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7977 |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7978 void |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7979 my_set_window_pos (HWND hwnd, HWND hwndAfter, |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7980 int x, int y, int cx, int cy, UINT flags) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7981 { |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7982 #ifndef ATTACH_THREADS |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7983 WINDOWPOS pos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7984 pos.hwndInsertAfter = hwndAfter; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7985 pos.x = x; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7986 pos.y = y; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7987 pos.cx = cx; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7988 pos.cy = cy; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7989 pos.flags = flags; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7990 SendMessage (hwnd, WM_EMACS_SETWINDOWPOS, (WPARAM) &pos, 0); |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7991 #else |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7992 SetWindowPos (hwnd, hwndAfter, x, y, cx, cy, flags); |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7993 #endif |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7994 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
7995 |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
7996 void |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7997 my_set_focus (f, hwnd) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7998 struct frame * f; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
7999 HWND hwnd; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8000 { |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8001 SendMessage (FRAME_W32_WINDOW (f), WM_EMACS_SETFOCUS, |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8002 (WPARAM) hwnd, 0); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8003 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8004 |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
8005 void |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8006 my_set_foreground_window (hwnd) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8007 HWND hwnd; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8008 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8009 SendMessage (hwnd, WM_EMACS_SETFOREGROUND, (WPARAM) hwnd, 0); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8010 } |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8011 |
| 13434 | 8012 void |
| 8013 my_destroy_window (f, hwnd) | |
| 8014 struct frame * f; | |
| 8015 HWND hwnd; | |
| 8016 { | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8017 SendMessage (FRAME_W32_WINDOW (f), WM_EMACS_DESTROYWINDOW, |
| 13434 | 8018 (WPARAM) hwnd, 0); |
| 8019 } | |
| 8020 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8021 /* Create a scroll bar and return the scroll bar vector for it. W is |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8022 the Emacs window on which to create the scroll bar. TOP, LEFT, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8023 WIDTH and HEIGHT are.the pixel coordinates and dimensions of the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8024 scroll bar. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8025 |
| 13434 | 8026 static struct scroll_bar * |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8027 x_scroll_bar_create (w, top, left, width, height) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8028 struct window *w; |
| 13434 | 8029 int top, left, width, height; |
| 8030 { | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8031 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8032 HWND hwnd; |
| 13434 | 8033 struct scroll_bar *bar |
| 8034 = XSCROLL_BAR (Fmake_vector (make_number (SCROLL_BAR_VEC_SIZE), Qnil)); | |
| 8035 | |
| 8036 BLOCK_INPUT; | |
| 8037 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8038 XSETWINDOW (bar->window, w); |
| 13434 | 8039 XSETINT (bar->top, top); |
| 8040 XSETINT (bar->left, left); | |
| 8041 XSETINT (bar->width, width); | |
| 8042 XSETINT (bar->height, height); | |
| 8043 XSETINT (bar->start, 0); | |
| 8044 XSETINT (bar->end, 0); | |
| 8045 bar->dragging = Qnil; | |
| 8046 | |
| 8047 /* Requires geometry to be set before call to create the real window */ | |
| 8048 | |
| 8049 hwnd = my_create_scrollbar (f, bar); | |
| 8050 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8051 if (pfnSetScrollInfo) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8052 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8053 SCROLLINFO si; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8054 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8055 si.cbSize = sizeof (si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8056 si.fMask = SIF_ALL; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8057 si.nMin = 0; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8058 si.nMax = VERTICAL_SCROLL_BAR_TOP_RANGE (f, height) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8059 + VERTICAL_SCROLL_BAR_MIN_HANDLE; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8060 si.nPage = si.nMax; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8061 si.nPos = 0; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8062 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8063 pfnSetScrollInfo (hwnd, SB_CTL, &si, FALSE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8064 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8065 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8066 { |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8067 SetScrollRange (hwnd, SB_CTL, 0, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8068 VERTICAL_SCROLL_BAR_TOP_RANGE (f, height), FALSE); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8069 SetScrollPos (hwnd, SB_CTL, 0, FALSE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8070 } |
| 13434 | 8071 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
8072 SET_SCROLL_BAR_W32_WINDOW (bar, hwnd); |
| 13434 | 8073 |
| 8074 /* Add bar to its frame's list of scroll bars. */ | |
| 8075 bar->next = FRAME_SCROLL_BARS (f); | |
| 8076 bar->prev = Qnil; | |
| 8077 XSETVECTOR (FRAME_SCROLL_BARS (f), bar); | |
| 8078 if (! NILP (bar->next)) | |
| 8079 XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar); | |
| 8080 | |
| 8081 UNBLOCK_INPUT; | |
| 8082 | |
| 8083 return bar; | |
| 8084 } | |
| 8085 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8086 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8087 /* Destroy scroll bar BAR, and set its Emacs window's scroll bar to |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8088 nil. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8089 |
| 13434 | 8090 static void |
| 8091 x_scroll_bar_remove (bar) | |
| 8092 struct scroll_bar *bar; | |
| 8093 { | |
| 8094 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); | |
| 8095 | |
| 8096 BLOCK_INPUT; | |
| 8097 | |
| 8098 /* Destroy the window. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
8099 my_destroy_window (f, SCROLL_BAR_W32_WINDOW (bar)); |
| 13434 | 8100 |
| 8101 /* Disassociate this scroll bar from its window. */ | |
| 8102 XWINDOW (bar->window)->vertical_scroll_bar = Qnil; | |
| 8103 | |
| 8104 UNBLOCK_INPUT; | |
| 8105 } | |
| 8106 | |
| 8107 /* Set the handle of the vertical scroll bar for WINDOW to indicate | |
| 8108 that we are displaying PORTION characters out of a total of WHOLE | |
| 8109 characters, starting at POSITION. If WINDOW has no scroll bar, | |
| 8110 create one. */ | |
| 8111 static void | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8112 w32_set_vertical_scroll_bar (w, portion, whole, position) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8113 struct window *w; |
| 13434 | 8114 int portion, whole, position; |
| 8115 { | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8116 struct frame *f = XFRAME (w->frame); |
| 13434 | 8117 struct scroll_bar *bar; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8118 int top, height, left, sb_left, width, sb_width; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8119 int window_x, window_y, window_width, window_height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8120 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8121 /* Get window dimensions. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8122 window_box (w, -1, &window_x, &window_y, &window_width, &window_height); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8123 top = window_y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8124 width = FRAME_SCROLL_BAR_COLS (f) * CANON_X_UNIT (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8125 height = window_height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8126 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8127 /* Compute the left edge of the scroll bar area. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8128 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8129 left = XINT (w->left) + XINT (w->width) - FRAME_SCROLL_BAR_COLS (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8130 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8131 left = XFASTINT (w->left); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8132 left *= CANON_X_UNIT (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8133 left += FRAME_INTERNAL_BORDER_WIDTH (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8134 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8135 /* Compute the width of the scroll bar which might be less than |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8136 the width of the area reserved for the scroll bar. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8137 if (FRAME_SCROLL_BAR_PIXEL_WIDTH (f) > 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8138 sb_width = FRAME_SCROLL_BAR_PIXEL_WIDTH (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8139 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8140 sb_width = width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8141 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8142 /* Compute the left edge of the scroll bar. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8143 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8144 sb_left = left + width - sb_width - (width - sb_width) / 2; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8145 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8146 sb_left = left + (width - sb_width) / 2; |
| 13434 | 8147 |
| 8148 /* Does the scroll bar exist yet? */ | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8149 if (NILP (w->vertical_scroll_bar)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8150 { |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
8151 HDC hdc; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8152 BLOCK_INPUT; |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
8153 if (width > 0 && height > 0) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8154 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8155 hdc = get_frame_dc (f); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8156 w32_clear_area (f, hdc, left, top, width, height); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8157 release_frame_dc (f, hdc); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8158 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8159 UNBLOCK_INPUT; |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
8160 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8161 bar = x_scroll_bar_create (w, top, sb_left, sb_width, height); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8162 } |
| 13434 | 8163 else |
| 8164 { | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8165 /* It may just need to be moved and resized. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8166 HWND hwnd; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8167 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8168 bar = XSCROLL_BAR (w->vertical_scroll_bar); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8169 hwnd = SCROLL_BAR_W32_WINDOW (bar); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8170 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8171 /* If already correctly positioned, do nothing. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8172 if ( XINT (bar->left) == sb_left |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8173 && XINT (bar->top) == top |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8174 && XINT (bar->width) == sb_width |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8175 && XINT (bar->height) == height ) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8176 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8177 /* Redraw after clear_frame. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8178 if (!my_show_window (f, hwnd, SW_NORMAL)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8179 InvalidateRect (hwnd, NULL, FALSE); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8180 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8181 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8182 { |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
8183 HDC hdc; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8184 BLOCK_INPUT; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8185 if (width && height) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8186 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8187 hdc = get_frame_dc (f); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8188 /* Since Windows scroll bars are smaller than the space reserved |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8189 for them on the frame, we have to clear "under" them. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8190 w32_clear_area (f, hdc, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8191 left, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8192 top, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8193 width, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8194 height); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8195 release_frame_dc (f, hdc); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8196 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8197 /* Make sure scroll bar is "visible" before moving, to ensure the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8198 area of the parent window now exposed will be refreshed. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8199 my_show_window (f, hwnd, SW_HIDE); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8200 MoveWindow (hwnd, sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8201 top, sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8202 max (height, 1), TRUE); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8203 if (pfnSetScrollInfo) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8204 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8205 SCROLLINFO si; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8206 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8207 si.cbSize = sizeof (si); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8208 si.fMask = SIF_RANGE; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8209 si.nMin = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8210 si.nMax = VERTICAL_SCROLL_BAR_TOP_RANGE (f, height) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8211 + VERTICAL_SCROLL_BAR_MIN_HANDLE; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8212 |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
8213 pfnSetScrollInfo (hwnd, SB_CTL, &si, FALSE); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8214 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8215 else |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
8216 SetScrollRange (hwnd, SB_CTL, 0, |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8217 VERTICAL_SCROLL_BAR_TOP_RANGE (f, height), FALSE); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8218 my_show_window (f, hwnd, SW_NORMAL); |
|
42919
2a546583564f
(x_update_window_begin): Only hide caret if
Jason Rumney <jasonr@gnu.org>
parents:
42864
diff
changeset
|
8219 /* InvalidateRect (w, NULL, FALSE); */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8220 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8221 /* Remember new settings. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8222 XSETINT (bar->left, sb_left); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8223 XSETINT (bar->top, top); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8224 XSETINT (bar->width, sb_width); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8225 XSETINT (bar->height, height); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8226 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8227 UNBLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8228 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8229 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8230 w32_set_scroll_bar_thumb (bar, portion, position, whole); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8231 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8232 XSETVECTOR (w->vertical_scroll_bar, bar); |
| 13434 | 8233 } |
| 8234 | |
| 8235 | |
| 8236 /* The following three hooks are used when we're doing a thorough | |
| 8237 redisplay of the frame. We don't explicitly know which scroll bars | |
| 8238 are going to be deleted, because keeping track of when windows go | |
| 8239 away is a real pain - "Can you say set-window-configuration, boys | |
| 8240 and girls?" Instead, we just assert at the beginning of redisplay | |
| 8241 that *all* scroll bars are to be removed, and then save a scroll bar | |
| 8242 from the fiery pit when we actually redisplay its window. */ | |
| 8243 | |
| 8244 /* Arrange for all scroll bars on FRAME to be removed at the next call | |
| 8245 to `*judge_scroll_bars_hook'. A scroll bar may be spared if | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8246 `*redeem_scroll_bar_hook' is applied to its window before the judgment. */ |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8247 |
| 13434 | 8248 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
8249 w32_condemn_scroll_bars (frame) |
| 13434 | 8250 FRAME_PTR frame; |
| 8251 { | |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8252 /* Transfer all the scroll bars to FRAME_CONDEMNED_SCROLL_BARS. */ |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8253 while (! NILP (FRAME_SCROLL_BARS (frame))) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8254 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8255 Lisp_Object bar; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8256 bar = FRAME_SCROLL_BARS (frame); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8257 FRAME_SCROLL_BARS (frame) = XSCROLL_BAR (bar)->next; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8258 XSCROLL_BAR (bar)->next = FRAME_CONDEMNED_SCROLL_BARS (frame); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8259 XSCROLL_BAR (bar)->prev = Qnil; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8260 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame))) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8261 XSCROLL_BAR (FRAME_CONDEMNED_SCROLL_BARS (frame))->prev = bar; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8262 FRAME_CONDEMNED_SCROLL_BARS (frame) = bar; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
8263 } |
| 13434 | 8264 } |
| 8265 | |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8266 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8267 /* Un-mark WINDOW's scroll bar for deletion in this judgment cycle. |
| 13434 | 8268 Note that WINDOW isn't necessarily condemned at all. */ |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8269 |
| 13434 | 8270 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
8271 w32_redeem_scroll_bar (window) |
| 13434 | 8272 struct window *window; |
| 8273 { | |
| 8274 struct scroll_bar *bar; | |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8275 struct frame *f; |
| 13434 | 8276 |
| 8277 /* We can't redeem this window's scroll bar if it doesn't have one. */ | |
| 8278 if (NILP (window->vertical_scroll_bar)) | |
| 8279 abort (); | |
| 8280 | |
| 8281 bar = XSCROLL_BAR (window->vertical_scroll_bar); | |
| 8282 | |
| 8283 /* Unlink it from the condemned list. */ | |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8284 f = XFRAME (WINDOW_FRAME (window)); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8285 if (NILP (bar->prev)) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8286 { |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8287 /* If the prev pointer is nil, it must be the first in one of |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8288 the lists. */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8289 if (EQ (FRAME_SCROLL_BARS (f), window->vertical_scroll_bar)) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8290 /* It's not condemned. Everything's fine. */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8291 return; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8292 else if (EQ (FRAME_CONDEMNED_SCROLL_BARS (f), |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8293 window->vertical_scroll_bar)) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8294 FRAME_CONDEMNED_SCROLL_BARS (f) = bar->next; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8295 else |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8296 /* If its prev pointer is nil, it must be at the front of |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8297 one or the other! */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8298 abort (); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8299 } |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8300 else |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8301 XSCROLL_BAR (bar->prev)->next = bar->next; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8302 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8303 if (! NILP (bar->next)) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8304 XSCROLL_BAR (bar->next)->prev = bar->prev; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8305 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8306 bar->next = FRAME_SCROLL_BARS (f); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8307 bar->prev = Qnil; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8308 XSETVECTOR (FRAME_SCROLL_BARS (f), bar); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8309 if (! NILP (bar->next)) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8310 XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar); |
| 13434 | 8311 } |
| 8312 | |
| 8313 /* Remove all scroll bars on FRAME that haven't been saved since the | |
| 8314 last call to `*condemn_scroll_bars_hook'. */ | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8315 |
| 13434 | 8316 static void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
8317 w32_judge_scroll_bars (f) |
| 13434 | 8318 FRAME_PTR f; |
| 8319 { | |
| 8320 Lisp_Object bar, next; | |
| 8321 | |
| 8322 bar = FRAME_CONDEMNED_SCROLL_BARS (f); | |
| 8323 | |
| 8324 /* Clear out the condemned list now so we won't try to process any | |
| 8325 more events on the hapless scroll bars. */ | |
| 8326 FRAME_CONDEMNED_SCROLL_BARS (f) = Qnil; | |
| 8327 | |
| 8328 for (; ! NILP (bar); bar = next) | |
| 8329 { | |
| 8330 struct scroll_bar *b = XSCROLL_BAR (bar); | |
| 8331 | |
| 8332 x_scroll_bar_remove (b); | |
| 8333 | |
| 8334 next = b->next; | |
| 8335 b->next = b->prev = Qnil; | |
| 8336 } | |
| 8337 | |
| 8338 /* Now there should be no references to the condemned scroll bars, | |
| 8339 and they should get garbage-collected. */ | |
| 8340 } | |
| 8341 | |
| 8342 /* Handle a mouse click on the scroll bar BAR. If *EMACS_EVENT's kind | |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
8343 is set to something other than NO_EVENT, it is enqueued. |
| 13434 | 8344 |
| 8345 This may be called from a signal handler, so we have to ignore GC | |
| 8346 mark bits. */ | |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
8347 |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8348 static int |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8349 w32_scroll_bar_handle_click (bar, msg, emacs_event) |
| 13434 | 8350 struct scroll_bar *bar; |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
8351 W32Msg *msg; |
| 13434 | 8352 struct input_event *emacs_event; |
| 8353 { | |
| 8354 if (! GC_WINDOWP (bar->window)) | |
| 8355 abort (); | |
| 8356 | |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
8357 emacs_event->kind = W32_SCROLL_BAR_CLICK_EVENT; |
| 13434 | 8358 emacs_event->code = 0; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8359 /* not really meaningful to distinguish up/down */ |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8360 emacs_event->modifiers = msg->dwModifiers; |
| 13434 | 8361 emacs_event->frame_or_window = bar->window; |
|
30199
298f10cd4ba5
(construct_mouse_click, construct_mouse_wheel)
Gerd Moellmann <gerd@gnu.org>
parents:
30179
diff
changeset
|
8362 emacs_event->arg = Qnil; |
| 13434 | 8363 emacs_event->timestamp = msg->msg.time; |
| 8364 | |
| 8365 { | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8366 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8367 int y; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8368 int dragging = !NILP (bar->dragging); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8369 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8370 if (pfnGetScrollInfo) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8371 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8372 SCROLLINFO si; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8373 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8374 si.cbSize = sizeof (si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8375 si.fMask = SIF_POS; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8376 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8377 pfnGetScrollInfo ((HWND) msg->msg.lParam, SB_CTL, &si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8378 y = si.nPos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8379 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8380 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8381 y = GetScrollPos ((HWND) msg->msg.lParam, SB_CTL); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8382 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8383 bar->dragging = Qnil; |
| 13434 | 8384 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8385 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8386 last_mouse_scroll_bar_pos = msg->msg.wParam; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8387 |
| 13434 | 8388 switch (LOWORD (msg->msg.wParam)) |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
8389 { |
|
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
8390 case SB_LINEDOWN: |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8391 emacs_event->part = scroll_bar_down_arrow; |
| 13434 | 8392 break; |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
8393 case SB_LINEUP: |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8394 emacs_event->part = scroll_bar_up_arrow; |
| 13434 | 8395 break; |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
8396 case SB_PAGEUP: |
| 13434 | 8397 emacs_event->part = scroll_bar_above_handle; |
| 8398 break; | |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
8399 case SB_PAGEDOWN: |
| 13434 | 8400 emacs_event->part = scroll_bar_below_handle; |
| 8401 break; | |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
8402 case SB_TOP: |
| 13434 | 8403 emacs_event->part = scroll_bar_handle; |
| 8404 y = 0; | |
| 8405 break; | |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
8406 case SB_BOTTOM: |
| 13434 | 8407 emacs_event->part = scroll_bar_handle; |
| 8408 y = top_range; | |
| 8409 break; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8410 case SB_THUMBTRACK: |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
8411 case SB_THUMBPOSITION: |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8412 if (VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)) <= 0xffff) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8413 y = HIWORD (msg->msg.wParam); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8414 bar->dragging = Qt; |
| 13434 | 8415 emacs_event->part = scroll_bar_handle; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8416 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8417 /* "Silently" update current position. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8418 if (pfnSetScrollInfo) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8419 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8420 SCROLLINFO si; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8421 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8422 si.cbSize = sizeof (si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8423 si.fMask = SIF_POS; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8424 si.nPos = y; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8425 /* Remember apparent position (we actually lag behind the real |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8426 position, so don't set that directly. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8427 last_scroll_bar_drag_pos = y; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8428 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8429 pfnSetScrollInfo (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, &si, FALSE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8430 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8431 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8432 SetScrollPos (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, y, FALSE); |
| 13434 | 8433 break; |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
8434 case SB_ENDSCROLL: |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8435 /* If this is the end of a drag sequence, then reset the scroll |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8436 handle size to normal and do a final redraw. Otherwise do |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8437 nothing. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8438 if (dragging) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8439 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8440 if (pfnSetScrollInfo) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8441 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8442 SCROLLINFO si; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8443 int start = XINT (bar->start); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8444 int end = XINT (bar->end); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8445 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8446 si.cbSize = sizeof (si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8447 si.fMask = SIF_PAGE | SIF_POS; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8448 si.nPage = end - start + VERTICAL_SCROLL_BAR_MIN_HANDLE; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8449 si.nPos = last_scroll_bar_drag_pos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8450 pfnSetScrollInfo (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, &si, TRUE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8451 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8452 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8453 SetScrollPos (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, y, TRUE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8454 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8455 /* fall through */ |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
8456 default: |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
8457 emacs_event->kind = NO_EVENT; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8458 return FALSE; |
|
15216
f639c5d732a3
(x_scroll_bar_set_handle): Always use start in calling SetScrollPos.
Richard M. Stallman <rms@gnu.org>
parents:
15204
diff
changeset
|
8459 } |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8460 |
| 13434 | 8461 XSETINT (emacs_event->x, y); |
| 8462 XSETINT (emacs_event->y, top_range); | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8463 |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8464 return TRUE; |
| 13434 | 8465 } |
| 8466 } | |
| 8467 | |
| 8468 /* Return information to the user about the current position of the mouse | |
| 8469 on the scroll bar. */ | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8470 |
| 13434 | 8471 static void |
| 8472 x_scroll_bar_report_motion (fp, bar_window, part, x, y, time) | |
| 8473 FRAME_PTR *fp; | |
| 8474 Lisp_Object *bar_window; | |
| 8475 enum scroll_bar_part *part; | |
| 8476 Lisp_Object *x, *y; | |
| 8477 unsigned long *time; | |
| 8478 { | |
| 8479 struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar); | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
8480 Window w = SCROLL_BAR_W32_WINDOW (bar); |
| 13434 | 8481 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); |
| 8482 int pos; | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8483 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)); |
| 13434 | 8484 |
| 8485 BLOCK_INPUT; | |
| 8486 | |
| 8487 *fp = f; | |
| 8488 *bar_window = bar->window; | |
| 8489 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8490 if (pfnGetScrollInfo) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8491 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8492 SCROLLINFO si; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8493 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8494 si.cbSize = sizeof (si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8495 si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8496 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8497 pfnGetScrollInfo (w, SB_CTL, &si); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8498 pos = si.nPos; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8499 top_range = si.nMax - si.nPage + 1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8500 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8501 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8502 pos = GetScrollPos (w, SB_CTL); |
| 13434 | 8503 |
| 8504 switch (LOWORD (last_mouse_scroll_bar_pos)) | |
| 8505 { | |
| 8506 case SB_THUMBPOSITION: | |
| 8507 case SB_THUMBTRACK: | |
| 8508 *part = scroll_bar_handle; | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8509 if (VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)) <= 0xffff) |
| 13434 | 8510 pos = HIWORD (last_mouse_scroll_bar_pos); |
| 8511 break; | |
| 8512 case SB_LINEDOWN: | |
| 8513 *part = scroll_bar_handle; | |
| 8514 pos++; | |
| 8515 break; | |
| 8516 default: | |
| 8517 *part = scroll_bar_handle; | |
| 8518 break; | |
| 8519 } | |
| 8520 | |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
8521 XSETINT (*x, pos); |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
8522 XSETINT (*y, top_range); |
| 13434 | 8523 |
| 8524 f->mouse_moved = 0; | |
| 8525 last_mouse_scroll_bar = Qnil; | |
| 8526 | |
| 8527 *time = last_mouse_movement_time; | |
| 8528 | |
| 8529 UNBLOCK_INPUT; | |
| 8530 } | |
| 8531 | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8532 |
| 13434 | 8533 /* The screen has been cleared so we may have changed foreground or |
| 8534 background colors, and the scroll bars may need to be redrawn. | |
| 8535 Clear out the scroll bars, and ask for expose events, so we can | |
| 8536 redraw them. */ | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8537 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8538 void |
| 13434 | 8539 x_scroll_bar_clear (f) |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8540 FRAME_PTR f; |
| 13434 | 8541 { |
| 8542 Lisp_Object bar; | |
| 8543 | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8544 /* We can have scroll bars even if this is 0, |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8545 if we just turned off scroll bar mode. |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8546 But in that case we should not clear them. */ |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8547 if (FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8548 for (bar = FRAME_SCROLL_BARS (f); VECTORP (bar); |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8549 bar = XSCROLL_BAR (bar)->next) |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8550 { |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8551 HWND window = SCROLL_BAR_W32_WINDOW (XSCROLL_BAR (bar)); |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8552 HDC hdc = GetDC (window); |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8553 RECT rect; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8554 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8555 /* Hide scroll bar until ready to repaint. x_scroll_bar_move |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8556 arranges to refresh the scroll bar if hidden. */ |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8557 my_show_window (f, window, SW_HIDE); |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8558 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8559 GetClientRect (window, &rect); |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8560 select_palette (f, hdc); |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8561 w32_clear_rect (f, hdc, &rect); |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8562 deselect_palette (f, hdc); |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8563 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8564 ReleaseDC (window, hdc); |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8565 } |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8566 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8567 |
| 13434 | 8568 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
8569 /* The main W32 event-reading loop - w32_read_socket. */ |
| 13434 | 8570 |
| 8571 /* Record the last 100 characters stored | |
| 8572 to help debug the loss-of-chars-during-GC problem. */ | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8573 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8574 static int temp_index; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8575 static short temp_buffer[100]; |
| 13434 | 8576 |
|
14462
599a3ae1e8ea
(convert_to_key_event, is_dead_key): New functions.
Geoff Voelker <voelker@cs.washington.edu>
parents:
14351
diff
changeset
|
8577 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
8578 /* Read events coming from the W32 shell. |
| 13434 | 8579 This routine is called by the SIGIO handler. |
| 8580 We return as soon as there are no more events to be read. | |
| 8581 | |
| 8582 Events representing keys are stored in buffer BUFP, | |
| 8583 which can hold up to NUMCHARS characters. | |
| 8584 We return the number of characters stored into the buffer, | |
| 8585 thus pretending to be `read'. | |
| 8586 | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8587 EXPECTED is nonzero if the caller knows input is available. |
| 13434 | 8588 |
| 8589 Some of these messages are reposted back to the message queue since the | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8590 system calls the windows proc directly in a context where we cannot return |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
8591 the data nor can we guarantee the state we are in. So if we dispatch them |
| 13434 | 8592 we will get into an infinite loop. To prevent this from ever happening we |
| 8593 will set a variable to indicate we are in the read_socket call and indicate | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8594 which message we are processing since the windows proc gets called |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
8595 recursively with different messages by the system. |
| 13434 | 8596 */ |
| 8597 | |
| 8598 int | |
|
16326
a85909645f7a
(w32_read_socket): Delete WAITP arg.
Richard M. Stallman <rms@gnu.org>
parents:
16258
diff
changeset
|
8599 w32_read_socket (sd, bufp, numchars, expected) |
| 13434 | 8600 register int sd; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8601 /* register */ struct input_event *bufp; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
8602 /* register */ int numchars; |
| 13434 | 8603 int expected; |
| 8604 { | |
| 8605 int count = 0; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8606 int check_visibility = 0; |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
8607 W32Msg msg; |
| 13434 | 8608 struct frame *f; |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
8609 struct w32_display_info *dpyinfo = &one_w32_display_info; |
| 13434 | 8610 |
| 8611 if (interrupt_input_blocked) | |
| 8612 { | |
| 8613 interrupt_input_pending = 1; | |
| 8614 return -1; | |
| 8615 } | |
| 8616 | |
| 8617 interrupt_input_pending = 0; | |
| 8618 BLOCK_INPUT; | |
| 8619 | |
| 8620 /* So people can tell when we have read the available input. */ | |
| 8621 input_signal_count++; | |
| 8622 | |
| 8623 if (numchars <= 0) | |
| 8624 abort (); /* Don't think this happens. */ | |
| 8625 | |
|
41447
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
8626 /* TODO: tool-bars, ghostscript integration, mouse |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8627 cursors. */ |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8628 while (get_next_msg (&msg, FALSE)) |
| 13434 | 8629 { |
| 8630 switch (msg.msg.message) | |
| 8631 { | |
| 8632 case WM_PAINT: | |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8633 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8634 |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8635 if (f) |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8636 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8637 if (msg.rect.right == msg.rect.left || |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8638 msg.rect.bottom == msg.rect.top) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8639 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8640 /* We may get paint messages even though the client |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8641 area is clipped - these are not expose events. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8642 DebPrint (("clipped frame %p (%s) got WM_PAINT - ignored\n", f, |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
8643 SDATA (f->name))); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8644 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8645 else if (f->async_visible != 1) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8646 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8647 /* Definitely not obscured, so mark as visible. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8648 f->async_visible = 1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8649 f->async_iconified = 0; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8650 SET_FRAME_GARBAGED (f); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8651 DebPrint (("frame %p (%s) reexposed by WM_PAINT\n", f, |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
8652 SDATA (f->name))); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8653 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8654 /* WM_PAINT serves as MapNotify as well, so report |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8655 visibility changes properly. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8656 if (f->iconified) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8657 { |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
8658 bufp->kind = DEICONIFY_EVENT; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8659 XSETFRAME (bufp->frame_or_window, f); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8660 bufp->arg = Qnil; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8661 bufp++; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8662 count++; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8663 numchars--; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8664 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8665 else if (! NILP (Vframe_list) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8666 && ! NILP (XCDR (Vframe_list))) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8667 /* Force a redisplay sooner or later to update the |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8668 frame titles in case this is the second frame. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8669 record_asynch_buffer_change (); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8670 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8671 else |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8672 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8673 HDC hdc = get_frame_dc (f); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8674 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8675 /* Erase background again for safety. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8676 w32_clear_rect (f, hdc, &msg.rect); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8677 release_frame_dc (f, hdc); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8678 expose_frame (f, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8679 msg.rect.left, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8680 msg.rect.top, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8681 msg.rect.right - msg.rect.left, |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8682 msg.rect.bottom - msg.rect.top); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8683 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
8684 } |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8685 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8686 |
|
23677
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8687 case WM_INPUTLANGCHANGE: |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8688 /* Generate a language change event. */ |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8689 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8690 |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8691 if (f) |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8692 { |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8693 if (numchars == 0) |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8694 abort (); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8695 |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
8696 bufp->kind = LANGUAGE_CHANGE_EVENT; |
|
23677
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8697 XSETFRAME (bufp->frame_or_window, f); |
|
30199
298f10cd4ba5
(construct_mouse_click, construct_mouse_wheel)
Gerd Moellmann <gerd@gnu.org>
parents:
30179
diff
changeset
|
8698 bufp->arg = Qnil; |
|
23677
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8699 bufp->code = msg.msg.wParam; |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8700 bufp->modifiers = msg.msg.lParam & 0xffff; |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8701 bufp++; |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8702 count++; |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8703 numchars--; |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8704 } |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8705 break; |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8706 |
| 13434 | 8707 case WM_KEYDOWN: |
| 8708 case WM_SYSKEYDOWN: | |
| 8709 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8710 |
| 13434 | 8711 if (f && !f->iconified) |
| 8712 { | |
|
43373
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8713 if (!dpyinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)) |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8714 { |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8715 dpyinfo->mouse_face_hidden = 1; |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8716 clear_mouse_face (dpyinfo); |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8717 } |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8718 |
| 13434 | 8719 if (temp_index == sizeof temp_buffer / sizeof (short)) |
| 8720 temp_index = 0; | |
| 8721 temp_buffer[temp_index++] = msg.msg.wParam; | |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
8722 bufp->kind = NON_ASCII_KEYSTROKE_EVENT; |
| 13434 | 8723 bufp->code = msg.msg.wParam; |
|
23677
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8724 bufp->modifiers = msg.dwModifiers; |
| 13434 | 8725 XSETFRAME (bufp->frame_or_window, f); |
|
30199
298f10cd4ba5
(construct_mouse_click, construct_mouse_wheel)
Gerd Moellmann <gerd@gnu.org>
parents:
30179
diff
changeset
|
8726 bufp->arg = Qnil; |
| 13434 | 8727 bufp->timestamp = msg.msg.time; |
| 8728 bufp++; | |
| 8729 numchars--; | |
| 8730 count++; | |
| 8731 } | |
| 8732 break; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8733 |
| 13434 | 8734 case WM_SYSCHAR: |
| 8735 case WM_CHAR: | |
| 8736 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8737 |
| 13434 | 8738 if (f && !f->iconified) |
| 8739 { | |
|
43373
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8740 if (!dpyinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)) |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8741 { |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8742 dpyinfo->mouse_face_hidden = 1; |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8743 clear_mouse_face (dpyinfo); |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8744 } |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8745 |
|
23677
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8746 if (temp_index == sizeof temp_buffer / sizeof (short)) |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8747 temp_index = 0; |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8748 temp_buffer[temp_index++] = msg.msg.wParam; |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
8749 bufp->kind = ASCII_KEYSTROKE_EVENT; |
|
23677
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8750 bufp->code = msg.msg.wParam; |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8751 bufp->modifiers = msg.dwModifiers; |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8752 XSETFRAME (bufp->frame_or_window, f); |
|
30199
298f10cd4ba5
(construct_mouse_click, construct_mouse_wheel)
Gerd Moellmann <gerd@gnu.org>
parents:
30179
diff
changeset
|
8753 bufp->arg = Qnil; |
|
23677
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8754 bufp->timestamp = msg.msg.time; |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8755 bufp++; |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8756 numchars--; |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
8757 count++; |
| 13434 | 8758 } |
| 8759 break; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8760 |
| 13434 | 8761 case WM_MOUSEMOVE: |
|
48819
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8762 /* Ignore non-movement. */ |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8763 { |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8764 int x = LOWORD (msg.msg.lParam); |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8765 int y = HIWORD (msg.msg.lParam); |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8766 if (x == last_mousemove_x && y == last_mousemove_y) |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8767 break; |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8768 last_mousemove_x = x; |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8769 last_mousemove_y = y; |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8770 } |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8771 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8772 previous_help_echo = help_echo; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8773 |
| 13434 | 8774 if (dpyinfo->grabbed && last_mouse_frame |
| 8775 && FRAME_LIVE_P (last_mouse_frame)) | |
| 8776 f = last_mouse_frame; | |
| 8777 else | |
| 8778 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8779 |
|
43373
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8780 if (dpyinfo->mouse_face_hidden) |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8781 { |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8782 dpyinfo->mouse_face_hidden = 0; |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8783 clear_mouse_face (dpyinfo); |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8784 } |
|
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
8785 |
| 13434 | 8786 if (f) |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8787 { |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8788 /* Generate SELECT_WINDOW_EVENTs when needed. */ |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8789 if (mouse_autoselect_window) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8790 { |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8791 Lisp_Object window; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8792 int area; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8793 int x = LOWORD (msg.msg.lParam); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8794 int y = HIWORD (msg.msg.lParam); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8795 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8796 window = window_from_coordinates (f, |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8797 x, y, |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8798 &area, 0); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8799 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8800 /* Window will be selected only when it is not |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8801 selected now and last mouse movement event was |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8802 not in it. Minibuffer window will be selected |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8803 iff it is active. */ |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8804 if (WINDOWP(window) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8805 && !EQ (window, last_window) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8806 && !EQ (window, selected_window) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8807 && numchars > 0) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8808 { |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8809 bufp->kind = SELECT_WINDOW_EVENT; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8810 bufp->frame_or_window = window; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8811 bufp->arg = Qnil; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8812 ++bufp, ++count, --numchars; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8813 } |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8814 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8815 last_window=window; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8816 } |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8817 note_mouse_movement (f, &msg.msg); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
8818 } |
| 13434 | 8819 else |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8820 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8821 /* If we move outside the frame, then we're |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8822 certainly no longer on any text in the frame. */ |
|
36315
b72dddbb65b2
* w32term.c (x_set_glyph_string_background_width): Extend the
Jason Rumney <jasonr@gnu.org>
parents:
36045
diff
changeset
|
8823 clear_mouse_face (dpyinfo); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8824 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8825 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8826 /* If the contents of the global variable help_echo |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8827 has changed, generate a HELP_EVENT. */ |
|
48819
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8828 if (help_echo != previous_help_echo || |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8829 (!NILP (help_echo) && !STRINGP (help_echo) && f->mouse_moved)) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8830 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8831 Lisp_Object frame; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
8832 int n; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8833 |
|
48819
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8834 if (help_echo == Qnil) |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8835 { |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8836 help_echo_object = help_echo_window = Qnil; |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8837 help_echo_pos = -1; |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8838 } |
|
c7fb53597300
(last_mousemove_x, last_mousemove_y): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
48360
diff
changeset
|
8839 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8840 if (f) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8841 XSETFRAME (frame, f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8842 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8843 frame = Qnil; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8844 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8845 any_help_event_p = 1; |
|
31010
040345be1d12
(w32_read_socket): Change calls to gen_help_event.
Gerd Moellmann <gerd@gnu.org>
parents:
30988
diff
changeset
|
8846 n = gen_help_event (bufp, numchars, help_echo, frame, |
|
040345be1d12
(w32_read_socket): Change calls to gen_help_event.
Gerd Moellmann <gerd@gnu.org>
parents:
30988
diff
changeset
|
8847 help_echo_window, help_echo_object, |
|
040345be1d12
(w32_read_socket): Change calls to gen_help_event.
Gerd Moellmann <gerd@gnu.org>
parents:
30988
diff
changeset
|
8848 help_echo_pos); |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
8849 bufp += n, count += n, numchars -= n; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8850 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8851 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8852 |
| 13434 | 8853 case WM_LBUTTONDOWN: |
| 8854 case WM_LBUTTONUP: | |
| 8855 case WM_MBUTTONDOWN: | |
| 8856 case WM_MBUTTONUP: | |
| 8857 case WM_RBUTTONDOWN: | |
| 8858 case WM_RBUTTONUP: | |
|
42720
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
8859 case WM_XBUTTONDOWN: |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
8860 case WM_XBUTTONUP: |
| 13434 | 8861 { |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8862 /* If we decide we want to generate an event to be seen |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8863 by the rest of Emacs, we put it here. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8864 struct input_event emacs_event; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8865 int tool_bar_p = 0; |
| 13434 | 8866 int button; |
| 8867 int up; | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8868 |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
8869 emacs_event.kind = NO_EVENT; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8870 |
| 13434 | 8871 if (dpyinfo->grabbed && last_mouse_frame |
| 8872 && FRAME_LIVE_P (last_mouse_frame)) | |
| 8873 f = last_mouse_frame; | |
| 8874 else | |
| 8875 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8876 |
| 13434 | 8877 if (f) |
| 8878 { | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8879 construct_mouse_click (&emacs_event, &msg, f); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8880 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8881 /* Is this in the tool-bar? */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8882 if (WINDOWP (f->tool_bar_window) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8883 && XFASTINT (XWINDOW (f->tool_bar_window)->height)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8884 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8885 Lisp_Object window; |
|
44045
b90b8e8e3626
(w32_read_socket) <WM_XBUTTONUP>: Use XFASTINT to extract mouse co-ordinates.
Jason Rumney <jasonr@gnu.org>
parents:
43760
diff
changeset
|
8886 int p, x, y; |
|
b90b8e8e3626
(w32_read_socket) <WM_XBUTTONUP>: Use XFASTINT to extract mouse co-ordinates.
Jason Rumney <jasonr@gnu.org>
parents:
43760
diff
changeset
|
8887 |
|
b90b8e8e3626
(w32_read_socket) <WM_XBUTTONUP>: Use XFASTINT to extract mouse co-ordinates.
Jason Rumney <jasonr@gnu.org>
parents:
43760
diff
changeset
|
8888 x = XFASTINT (emacs_event.x); |
|
b90b8e8e3626
(w32_read_socket) <WM_XBUTTONUP>: Use XFASTINT to extract mouse co-ordinates.
Jason Rumney <jasonr@gnu.org>
parents:
43760
diff
changeset
|
8889 y = XFASTINT (emacs_event.y); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8890 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8891 /* Set x and y. */ |
|
44095
cdcab7b110f6
(zv_bits): Declare as short, for word alignment.
Jason Rumney <jasonr@gnu.org>
parents:
44045
diff
changeset
|
8892 window = window_from_coordinates (f, x, y, &p, 1); |
|
cdcab7b110f6
(zv_bits): Declare as short, for word alignment.
Jason Rumney <jasonr@gnu.org>
parents:
44045
diff
changeset
|
8893 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8894 if (EQ (window, f->tool_bar_window)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8895 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8896 w32_handle_tool_bar_click (f, &emacs_event); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8897 tool_bar_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8898 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8899 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8900 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8901 if (!tool_bar_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8902 if (!dpyinfo->w32_focus_frame |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8903 || f == dpyinfo->w32_focus_frame |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8904 && (numchars >= 1)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8905 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8906 construct_mouse_click (bufp, &msg, f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8907 bufp++; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8908 count++; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8909 numchars--; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8910 } |
| 13434 | 8911 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8912 |
|
42720
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
8913 parse_button (msg.msg.message, HIWORD (msg.msg.wParam), |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
8914 &button, &up); |
|
1217a83a82e4
(parse_button): New parameter xbutton. Callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
42675
diff
changeset
|
8915 |
| 13434 | 8916 if (up) |
| 8917 { | |
| 8918 dpyinfo->grabbed &= ~ (1 << button); | |
| 8919 } | |
| 8920 else | |
| 8921 { | |
| 8922 dpyinfo->grabbed |= (1 << button); | |
| 8923 last_mouse_frame = f; | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8924 /* Ignore any mouse motion that happened |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8925 before this event; any subsequent mouse-movement |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8926 Emacs events should reflect only motion after |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8927 the ButtonPress. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8928 if (f != 0) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8929 f->mouse_moved = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8930 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8931 if (!tool_bar_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
8932 last_tool_bar_item = -1; |
| 13434 | 8933 } |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8934 break; |
| 13434 | 8935 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8936 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8937 case WM_MOUSEWHEEL: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8938 if (dpyinfo->grabbed && last_mouse_frame |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8939 && FRAME_LIVE_P (last_mouse_frame)) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8940 f = last_mouse_frame; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8941 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8942 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8943 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8944 if (f) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8945 { |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8946 if ((!dpyinfo->w32_focus_frame |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8947 || f == dpyinfo->w32_focus_frame) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8948 && (numchars >= 1)) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8949 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8950 construct_mouse_wheel (bufp, &msg, f); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8951 bufp++; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8952 count++; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8953 numchars--; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8954 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8955 } |
| 13434 | 8956 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8957 |
| 21885 | 8958 case WM_DROPFILES: |
| 8959 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
| 8960 | |
| 8961 if (f) | |
| 8962 { | |
| 8963 construct_drag_n_drop (bufp, &msg, f); | |
| 8964 bufp++; | |
| 8965 count++; | |
| 8966 numchars--; | |
| 8967 } | |
| 8968 break; | |
| 8969 | |
| 13434 | 8970 case WM_VSCROLL: |
| 8971 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8972 struct scroll_bar *bar = |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8973 x_window_to_scroll_bar ((HWND)msg.msg.lParam); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8974 |
| 13434 | 8975 if (bar && numchars >= 1) |
| 8976 { | |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
8977 if (w32_scroll_bar_handle_click (bar, &msg, bufp)) |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8978 { |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8979 bufp++; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8980 count++; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8981 numchars--; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
8982 } |
| 13434 | 8983 } |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8984 break; |
| 13434 | 8985 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
8986 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8987 case WM_WINDOWPOSCHANGED: |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
8988 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
8989 if (f) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
8990 { |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
8991 x_check_fullscreen_move(f); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
8992 if (f->output_data.w32->want_fullscreen & FULLSCREEN_WAIT) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
8993 f->output_data.w32->want_fullscreen &= |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
8994 ~(FULLSCREEN_WAIT|FULLSCREEN_BOTH); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
8995 } |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
8996 check_visibility = 1; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
8997 break; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
8998 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
8999 case WM_ACTIVATE: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9000 case WM_ACTIVATEAPP: |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
9001 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
9002 if (f) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
9003 x_check_fullscreen (f); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9004 check_visibility = 1; |
| 13434 | 9005 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9006 |
| 13434 | 9007 case WM_MOVE: |
| 9008 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9009 |
| 13434 | 9010 if (f && !f->async_iconified) |
| 9011 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9012 int x, y; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9013 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9014 x_real_positions (f, &x, &y); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9015 f->output_data.w32->left_pos = x; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9016 f->output_data.w32->top_pos = y; |
| 13434 | 9017 } |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9018 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9019 check_visibility = 1; |
| 13434 | 9020 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9021 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9022 case WM_SHOWWINDOW: |
|
41447
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9023 /* wParam non-zero means Window is about to be shown, 0 means |
|
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9024 about to be hidden. */ |
|
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9025 /* Redo the mouse-highlight after the tooltip has gone. */ |
|
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9026 if (!msg.msg.wParam && msg.msg.hwnd == tip_window) |
|
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9027 { |
|
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9028 tip_window = NULL; |
|
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9029 redo_mouse_highlight (); |
|
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9030 } |
|
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9031 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9032 /* If window has been obscured or exposed by another window |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9033 being maximised or minimised/restored, then recheck |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9034 visibility of all frames. Direct changes to our own |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9035 windows get handled by WM_SIZE. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9036 #if 0 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9037 if (msg.msg.lParam != 0) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9038 check_visibility = 1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9039 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9040 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9041 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9042 f->async_visible = msg.msg.wParam; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9043 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9044 #endif |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9045 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9046 check_visibility = 1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9047 break; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9048 |
| 13434 | 9049 case WM_SIZE: |
| 9050 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9051 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9052 /* Inform lisp of whether frame has been iconified etc. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9053 if (f) |
| 13434 | 9054 { |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9055 switch (msg.msg.wParam) |
| 13434 | 9056 { |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9057 case SIZE_MINIMIZED: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9058 f->async_visible = 0; |
| 13434 | 9059 f->async_iconified = 1; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9060 |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
9061 bufp->kind = ICONIFY_EVENT; |
| 13434 | 9062 XSETFRAME (bufp->frame_or_window, f); |
|
30199
298f10cd4ba5
(construct_mouse_click, construct_mouse_wheel)
Gerd Moellmann <gerd@gnu.org>
parents:
30179
diff
changeset
|
9063 bufp->arg = Qnil; |
| 13434 | 9064 bufp++; |
| 9065 count++; | |
| 9066 numchars--; | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9067 break; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9068 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9069 case SIZE_MAXIMIZED: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9070 case SIZE_RESTORED: |
| 13434 | 9071 f->async_visible = 1; |
| 9072 f->async_iconified = 0; | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9073 |
| 13434 | 9074 /* wait_reading_process_input will notice this and update |
| 9075 the frame's display structures. */ | |
| 9076 SET_FRAME_GARBAGED (f); | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9077 |
| 13434 | 9078 if (f->iconified) |
| 9079 { | |
|
24827
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
9080 int x, y; |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
9081 |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
9082 /* Reset top and left positions of the Window |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
9083 here since Windows sends a WM_MOVE message |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
9084 BEFORE telling us the Window is minimized |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
9085 when the Window is iconified, with 3000,3000 |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
9086 as the co-ords. */ |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
9087 x_real_positions (f, &x, &y); |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
9088 f->output_data.w32->left_pos = x; |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
9089 f->output_data.w32->top_pos = y; |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
9090 |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
9091 bufp->kind = DEICONIFY_EVENT; |
| 13434 | 9092 XSETFRAME (bufp->frame_or_window, f); |
|
30199
298f10cd4ba5
(construct_mouse_click, construct_mouse_wheel)
Gerd Moellmann <gerd@gnu.org>
parents:
30179
diff
changeset
|
9093 bufp->arg = Qnil; |
| 13434 | 9094 bufp++; |
| 9095 count++; | |
| 9096 numchars--; | |
| 9097 } | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
9098 else if (! NILP (Vframe_list) |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
9099 && ! NILP (XCDR (Vframe_list))) |
| 13434 | 9100 /* Force a redisplay sooner or later |
| 9101 to update the frame titles | |
| 9102 in case this is the second frame. */ | |
| 9103 record_asynch_buffer_change (); | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9104 break; |
| 13434 | 9105 } |
| 9106 } | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9107 |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9108 if (f && !f->async_iconified && msg.msg.wParam != SIZE_MINIMIZED) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9109 { |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9110 RECT rect; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9111 int rows; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9112 int columns; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9113 int width; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9114 int height; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9115 |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
9116 GetClientRect (msg.msg.hwnd, &rect); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9117 |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9118 height = rect.bottom - rect.top; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9119 width = rect.right - rect.left; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9120 |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9121 rows = PIXEL_TO_CHAR_HEIGHT (f, height); |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9122 columns = PIXEL_TO_CHAR_WIDTH (f, width); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9123 |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9124 /* TODO: Clip size to the screen dimensions. */ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9125 |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9126 /* Even if the number of character rows and columns has |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9127 not changed, the font size may have changed, so we need |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9128 to check the pixel dimensions as well. */ |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9129 |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9130 if (columns != f->width |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9131 || rows != f->height |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9132 || width != f->output_data.w32->pixel_width |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9133 || height != f->output_data.w32->pixel_height) |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9134 { |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9135 change_frame_size (f, rows, columns, 0, 1, 0); |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9136 SET_FRAME_GARBAGED (f); |
|
24827
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
9137 cancel_mouse_face (f); |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9138 f->output_data.w32->pixel_width = width; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9139 f->output_data.w32->pixel_height = height; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9140 f->output_data.w32->win_gravity = NorthWestGravity; |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9141 } |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9142 } |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
9143 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9144 check_visibility = 1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9145 break; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9146 |
|
41731
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9147 case WM_MOUSELEAVE: |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9148 f = x_any_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9149 if (f) |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9150 { |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9151 if (f == dpyinfo->mouse_face_mouse_frame) |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9152 { |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9153 /* If we move outside the frame, then we're |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9154 certainly no longer on any text in the frame. */ |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9155 clear_mouse_face (dpyinfo); |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9156 dpyinfo->mouse_face_mouse_frame = 0; |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9157 } |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9158 |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9159 /* Generate a nil HELP_EVENT to cancel a help-echo. |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9160 Do it only if there's something to cancel. |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9161 Otherwise, the startup message is cleared when |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9162 the mouse leaves the frame. */ |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9163 if (any_help_event_p) |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9164 { |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9165 Lisp_Object frame; |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9166 int n; |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9167 |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9168 XSETFRAME (frame, f); |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9169 help_echo = Qnil; |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9170 n = gen_help_event (bufp, numchars, |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9171 Qnil, frame, Qnil, Qnil, 0); |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9172 bufp += n, count += n, numchars -= n; |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9173 } |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9174 } |
|
33ba14e9c09a
(w32_read_socket) <WM_MOUSELEAVE>: Cancel help echo
Jason Rumney <jasonr@gnu.org>
parents:
41727
diff
changeset
|
9175 break; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9176 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9177 case WM_SETFOCUS: |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9178 /* TODO: Port this change: |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9179 2002-06-28 Jan D. <jan.h.d@swipnet.se> |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9180 * xterm.h (struct x_output): Add focus_state. |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9181 * xterm.c (x_focus_changed): New function. |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9182 (x_detect_focus_change): New function. |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9183 (XTread_socket): Call x_detect_focus_change for FocusIn/FocusOut |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9184 EnterNotify and LeaveNotify to track X focus changes. |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9185 */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9186 f = x_any_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9187 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9188 dpyinfo->w32_focus_event_frame = f; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9189 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9190 if (f) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9191 x_new_focus_frame (dpyinfo, f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9192 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9193 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9194 dpyinfo->grabbed = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9195 check_visibility = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9196 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9197 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9198 case WM_KILLFOCUS: |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
9199 /* TODO: some of this belongs in MOUSE_LEAVE */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9200 f = x_top_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9201 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9202 if (f) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9203 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9204 if (f == dpyinfo->w32_focus_event_frame) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9205 dpyinfo->w32_focus_event_frame = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9206 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9207 if (f == dpyinfo->w32_focus_frame) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9208 x_new_focus_frame (dpyinfo, 0); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9209 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9210 if (f == dpyinfo->mouse_face_mouse_frame) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9211 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9212 /* If we move outside the frame, then we're |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9213 certainly no longer on any text in the frame. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9214 clear_mouse_face (dpyinfo); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9215 dpyinfo->mouse_face_mouse_frame = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9216 } |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
9217 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9218 /* Generate a nil HELP_EVENT to cancel a help-echo. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9219 Do it only if there's something to cancel. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9220 Otherwise, the startup message is cleared when |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9221 the mouse leaves the frame. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9222 if (any_help_event_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9223 { |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9224 Lisp_Object frame; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
9225 int n; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
9226 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9227 XSETFRAME (frame, f); |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9228 help_echo = Qnil; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9229 n = gen_help_event (bufp, numchars, |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9230 Qnil, frame, Qnil, Qnil, 0); |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
9231 bufp += n, count += n, numchars -=n; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9232 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9233 } |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9234 |
|
24752
80c46fd667da
(w32_read_socket): Reset the grabbed flag when a frame gains or
Andrew Innes <andrewi@gnu.org>
parents:
24733
diff
changeset
|
9235 dpyinfo->grabbed = 0; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9236 check_visibility = 1; |
| 13434 | 9237 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9238 |
| 13434 | 9239 case WM_CLOSE: |
| 9240 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9241 |
| 13434 | 9242 if (f) |
| 9243 { | |
| 9244 if (numchars == 0) | |
| 9245 abort (); | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9246 |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
9247 bufp->kind = DELETE_WINDOW_EVENT; |
| 13434 | 9248 XSETFRAME (bufp->frame_or_window, f); |
|
30199
298f10cd4ba5
(construct_mouse_click, construct_mouse_wheel)
Gerd Moellmann <gerd@gnu.org>
parents:
30179
diff
changeset
|
9249 bufp->arg = Qnil; |
| 13434 | 9250 bufp++; |
| 9251 count++; | |
| 9252 numchars--; | |
| 9253 } | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9254 break; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9255 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9256 case WM_INITMENU: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9257 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9258 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9259 if (f) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9260 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9261 if (numchars == 0) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9262 abort (); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9263 |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45507
diff
changeset
|
9264 bufp->kind = MENU_BAR_ACTIVATE_EVENT; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9265 XSETFRAME (bufp->frame_or_window, f); |
|
30199
298f10cd4ba5
(construct_mouse_click, construct_mouse_wheel)
Gerd Moellmann <gerd@gnu.org>
parents:
30179
diff
changeset
|
9266 bufp->arg = Qnil; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9267 bufp++; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9268 count++; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9269 numchars--; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9270 } |
| 13434 | 9271 break; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9272 |
| 13434 | 9273 case WM_COMMAND: |
| 9274 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); | |
|
21740
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
9275 |
| 13434 | 9276 if (f) |
| 9277 { | |
|
23677
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
9278 extern void menubar_selection_callback |
|
70999481c915
(convert_to_key_event): Removed.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23639
diff
changeset
|
9279 (FRAME_PTR f, void * client_data); |
|
21740
92c501ecca49
(w32_read_socket): Don't misinterpret WM_PAINT message
Geoff Voelker <voelker@cs.washington.edu>
parents:
21614
diff
changeset
|
9280 menubar_selection_callback (f, (void *)msg.msg.wParam); |
| 13434 | 9281 } |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9282 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9283 check_visibility = 1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9284 break; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9285 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9286 case WM_DISPLAYCHANGE: |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9287 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9288 |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9289 if (f) |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9290 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9291 dpyinfo->width = (short) LOWORD (msg.msg.lParam); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9292 dpyinfo->height = (short) HIWORD (msg.msg.lParam); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9293 dpyinfo->n_cbits = msg.msg.wParam; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9294 DebPrint (("display change: %d %d\n", dpyinfo->width, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9295 dpyinfo->height)); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9296 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9297 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9298 check_visibility = 1; |
| 13434 | 9299 break; |
|
21875
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9300 |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9301 default: |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9302 /* Check for messages registered at runtime. */ |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9303 if (msg.msg.message == msh_mousewheel) |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9304 { |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9305 if (dpyinfo->grabbed && last_mouse_frame |
|
21875
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9306 && FRAME_LIVE_P (last_mouse_frame)) |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9307 f = last_mouse_frame; |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9308 else |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9309 f = x_window_to_frame (dpyinfo, msg.msg.hwnd); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9310 |
|
21875
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9311 if (f) |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9312 { |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9313 if ((!dpyinfo->w32_focus_frame |
|
21875
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9314 || f == dpyinfo->w32_focus_frame) |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9315 && (numchars >= 1)) |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9316 { |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9317 construct_mouse_wheel (bufp, &msg, f); |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9318 bufp++; |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9319 count++; |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9320 numchars--; |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9321 } |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9322 } |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9323 } |
|
16414f4d07e7
(msh_mousewheel): Declare.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21831
diff
changeset
|
9324 break; |
| 13434 | 9325 } |
| 9326 } | |
| 9327 | |
| 9328 /* If the focus was just given to an autoraising frame, | |
| 9329 raise it now. */ | |
| 9330 /* ??? This ought to be able to handle more than one such frame. */ | |
| 9331 if (pending_autoraise_frame) | |
| 9332 { | |
| 9333 x_raise_frame (pending_autoraise_frame); | |
| 9334 pending_autoraise_frame = 0; | |
| 9335 } | |
| 9336 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9337 /* Check which frames are still visisble, if we have enqueued any user |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9338 events or been notified of events that may affect visibility. We |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9339 do this here because there doesn't seem to be any direct |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9340 notification from Windows that the visibility of a window has |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9341 changed (at least, not in all cases). */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9342 if (count > 0 || check_visibility) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9343 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9344 Lisp_Object tail, frame; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9345 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9346 FOR_EACH_FRAME (tail, frame) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9347 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9348 FRAME_PTR f = XFRAME (frame); |
|
41447
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9349 /* The tooltip has been drawn already. Avoid the |
|
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9350 SET_FRAME_GARBAGED below. */ |
|
41639
0c5ab6e27a8f
(w32_read_socket) <WM_MENUSELECT>: Remove.
Jason Rumney <jasonr@gnu.org>
parents:
41447
diff
changeset
|
9351 if (EQ (frame, tip_frame)) |
|
41447
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9352 continue; |
|
783d21cc62b9
(x_after_update_window_line): Doc fix.
Jason Rumney <jasonr@gnu.org>
parents:
41249
diff
changeset
|
9353 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9354 /* Check "visible" frames and mark each as obscured or not. |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9355 Note that async_visible is nonzero for unobscured and |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9356 obscured frames, but zero for hidden and iconified frames. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9357 if (FRAME_W32_P (f) && f->async_visible) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9358 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9359 RECT clipbox; |
|
40005
8bde67004473
(w32_read_socket): Determine clipping rectangle for
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
9360 HDC hdc; |
|
8bde67004473
(w32_read_socket): Determine clipping rectangle for
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
9361 |
|
8bde67004473
(w32_read_socket): Determine clipping rectangle for
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
9362 enter_crit (); |
|
8bde67004473
(w32_read_socket): Determine clipping rectangle for
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
9363 /* Query clipping rectangle for the entire window area |
|
8bde67004473
(w32_read_socket): Determine clipping rectangle for
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
9364 (GetWindowDC), not just the client portion (GetDC). |
|
8bde67004473
(w32_read_socket): Determine clipping rectangle for
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
9365 Otherwise, the scrollbars and menubar aren't counted as |
|
8bde67004473
(w32_read_socket): Determine clipping rectangle for
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
9366 part of the visible area of the frame, and we may think |
|
8bde67004473
(w32_read_socket): Determine clipping rectangle for
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
9367 the frame is obscured when really a scrollbar is still |
|
8bde67004473
(w32_read_socket): Determine clipping rectangle for
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
9368 visible and gets WM_PAINT messages above. */ |
|
8bde67004473
(w32_read_socket): Determine clipping rectangle for
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
9369 hdc = GetWindowDC (FRAME_W32_WINDOW (f)); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9370 GetClipBox (hdc, &clipbox); |
|
40005
8bde67004473
(w32_read_socket): Determine clipping rectangle for
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
9371 ReleaseDC (FRAME_W32_WINDOW (f), hdc); |
|
8bde67004473
(w32_read_socket): Determine clipping rectangle for
Andrew Innes <andrewi@gnu.org>
parents:
39973
diff
changeset
|
9372 leave_crit (); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9373 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9374 if (clipbox.right == clipbox.left |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9375 || clipbox.bottom == clipbox.top) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9376 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9377 /* Frame has become completely obscured so mark as |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9378 such (we do this by setting async_visible to 2 so |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9379 that FRAME_VISIBLE_P is still true, but redisplay |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9380 will skip it). */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9381 f->async_visible = 2; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9382 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9383 if (!FRAME_OBSCURED_P (f)) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9384 { |
|
39129
651a67207f2b
(w32_read_socket): Add more information to debugging output.
Andrew Innes <andrewi@gnu.org>
parents:
39002
diff
changeset
|
9385 DebPrint (("frame %p (%s) obscured\n", f, |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
9386 SDATA (f->name))); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9387 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9388 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9389 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9390 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9391 /* Frame is not obscured, so mark it as such. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9392 f->async_visible = 1; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9393 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9394 if (FRAME_OBSCURED_P (f)) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9395 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9396 SET_FRAME_GARBAGED (f); |
|
39129
651a67207f2b
(w32_read_socket): Add more information to debugging output.
Andrew Innes <andrewi@gnu.org>
parents:
39002
diff
changeset
|
9397 DebPrint (("obscured frame %p (%s) found to be visible\n", f, |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
9398 SDATA (f->name))); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9399 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9400 /* Force a redisplay sooner or later. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9401 record_asynch_buffer_change (); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9402 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9403 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9404 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9405 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9406 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
9407 |
| 13434 | 9408 UNBLOCK_INPUT; |
| 9409 return count; | |
| 9410 } | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9411 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
9412 |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
9413 |
| 13434 | 9414 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9415 /*********************************************************************** |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9416 Text Cursor |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9417 ***********************************************************************/ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9418 |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9419 /* Notice when the text cursor of window W has been completely |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9420 overwritten by a drawing operation that outputs glyphs in AREA |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9421 starting at X0 and ending at X1 in the line starting at Y0 and |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9422 ending at Y1. X coordinates are area-relative. X1 < 0 means all |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9423 the rest of the line after X0 has been written. Y coordinates |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9424 are window-relative. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9425 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9426 static void |
|
42538
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
9427 notice_overwritten_cursor (w, area, x0, x1, y0, y1) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9428 struct window *w; |
|
42538
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
9429 enum glyph_row_area area; |
|
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
9430 int x0, x1, y0, y1; |
|
2b4179d13ed7
(x_setup_relief_colors): Don't compute an image's
Jason Rumney <jasonr@gnu.org>
parents:
42206
diff
changeset
|
9431 { |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9432 if (area == TEXT_AREA && w->phys_cursor_on_p) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9433 { |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9434 int cx0 = w->phys_cursor.x; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9435 int cx1 = cx0 + w->phys_cursor_width; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9436 int cy0 = w->phys_cursor.y; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9437 int cy1 = cy0 + w->phys_cursor_height; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9438 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9439 if (x0 <= cx0 && (x1 < 0 || x1 >= cx1)) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9440 { |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9441 /* The cursor image will be completely removed from the |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9442 screen if the output area intersects the cursor area in |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9443 y-direction. When we draw in [y0 y1[, and some part of |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9444 the cursor is at y < y0, that part must have been drawn |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9445 before. When scrolling, the cursor is erased before |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9446 actually scrolling, so we don't come here. When not |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9447 scrolling, the rows above the old cursor row must have |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9448 changed, and in this case these rows must have written |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9449 over the cursor image. |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9450 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9451 Likewise if part of the cursor is below y1, with the |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9452 exception of the cursor being in the first blank row at |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9453 the buffer and window end because update_text_area |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9454 doesn't draw that row. (Except when it does, but |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9455 that's handled in update_text_area.) */ |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9456 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9457 if (((y0 >= cy0 && y0 < cy1) || (y1 > cy0 && y1 < cy1)) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9458 && w->current_matrix->rows[w->phys_cursor.vpos].displays_text_p) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9459 w->phys_cursor_on_p = 0; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9460 } |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9461 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9462 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9463 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9464 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9465 /* Set clipping for output in glyph row ROW. W is the window in which |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9466 we operate. GC is the graphics context to set clipping in. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9467 WHOLE_LINE_P non-zero means include the areas used for truncation |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9468 mark display and alike in the clipping rectangle. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9469 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9470 ROW may be a text row or, e.g., a mode line. Text rows must be |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9471 clipped to the interior of the window dedicated to text display, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9472 mode lines must be clipped to the whole window. */ |
| 13434 | 9473 |
| 9474 static void | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9475 w32_clip_to_row (w, row, hdc, whole_line_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9476 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9477 struct glyph_row *row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9478 HDC hdc; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9479 int whole_line_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9480 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9481 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9482 RECT clip_rect; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9483 int window_x, window_y, window_width, window_height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9484 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9485 window_box (w, -1, &window_x, &window_y, &window_width, &window_height); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9486 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9487 clip_rect.left = WINDOW_TO_FRAME_PIXEL_X (w, 0); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9488 clip_rect.top = WINDOW_TO_FRAME_PIXEL_Y (w, row->y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9489 clip_rect.top = max (clip_rect.top, window_y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9490 clip_rect.right = clip_rect.left + window_width; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9491 clip_rect.bottom = clip_rect.top + row->visible_height; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9492 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9493 /* If clipping to the whole line, including trunc marks, extend |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
9494 the rectangle to the left and increase its width. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9495 if (whole_line_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9496 { |
| 41125 | 9497 clip_rect.left -= FRAME_X_LEFT_FRINGE_WIDTH (f); |
| 9498 clip_rect.right += FRAME_X_FRINGE_WIDTH (f); | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9499 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9500 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9501 w32_set_clip_rectangle (hdc, &clip_rect); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9502 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9503 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9504 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9505 /* Draw a hollow box cursor on window W in glyph row ROW. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9506 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9507 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9508 x_draw_hollow_cursor (w, row) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9509 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9510 struct glyph_row *row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9511 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9512 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
|
34779
94c3431a7fe2
(x_draw_hollow_cursor): Delay obtaining the frame's DC to avoid
Jason Rumney <jasonr@gnu.org>
parents:
34545
diff
changeset
|
9513 HDC hdc; |
| 13434 | 9514 RECT rect; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9515 int wd; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9516 struct glyph *cursor_glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9517 HBRUSH hb = CreateSolidBrush (f->output_data.w32->cursor_pixel); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9518 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9519 /* Compute frame-relative coordinates from window-relative |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9520 coordinates. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9521 rect.left = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9522 rect.top = (WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9523 + row->ascent - w->phys_cursor_ascent); |
|
43760
0d2e63aa9d91
(x_draw_hollow_cursor): Draw same size as block cursor.
Jason Rumney <jasonr@gnu.org>
parents:
43713
diff
changeset
|
9524 rect.bottom = rect.top + row->height; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9525 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9526 /* Get the glyph the cursor is on. If we can't tell because |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9527 the current matrix is invalid or such, give up. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9528 cursor_glyph = get_phys_cursor_glyph (w); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9529 if (cursor_glyph == NULL) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9530 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9531 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9532 /* Compute the width of the rectangle to draw. If on a stretch |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9533 glyph, and `x-stretch-block-cursor' is nil, don't draw a |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9534 rectangle as wide as the glyph, but use a canonical character |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9535 width instead. */ |
|
43760
0d2e63aa9d91
(x_draw_hollow_cursor): Draw same size as block cursor.
Jason Rumney <jasonr@gnu.org>
parents:
43713
diff
changeset
|
9536 wd = cursor_glyph->pixel_width; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9537 if (cursor_glyph->type == STRETCH_GLYPH |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9538 && !x_stretch_cursor_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9539 wd = min (CANON_X_UNIT (f), wd); |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9540 w->phys_cursor_width = wd; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9541 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9542 rect.right = rect.left + wd; |
|
34779
94c3431a7fe2
(x_draw_hollow_cursor): Delay obtaining the frame's DC to avoid
Jason Rumney <jasonr@gnu.org>
parents:
34545
diff
changeset
|
9543 hdc = get_frame_dc (f); |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9544 /* Set clipping, draw the rectangle, and reset clipping again. */ |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9545 w32_clip_to_row (w, row, hdc, 0); |
| 13434 | 9546 FrameRect (hdc, &rect, hb); |
| 9547 DeleteObject (hb); | |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9548 w32_set_clip_rectangle (hdc, NULL); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
9549 release_frame_dc (f, hdc); |
| 13434 | 9550 } |
| 9551 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9552 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9553 /* Draw a bar cursor on window W in glyph row ROW. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9554 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9555 Implementation note: One would like to draw a bar cursor with an |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9556 angle equal to the one given by the font property XA_ITALIC_ANGLE. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9557 Unfortunately, I didn't find a font yet that has this property set. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9558 --gerd. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9559 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9560 static void |
|
45467
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9561 x_draw_bar_cursor (w, row, width, kind) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9562 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9563 struct glyph_row *row; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
9564 int width; |
|
45467
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9565 enum text_cursor_kinds kind; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9566 { |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9567 struct frame *f = XFRAME (w->frame); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9568 struct glyph *cursor_glyph; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9569 int x; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9570 HDC hdc; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9571 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9572 /* If cursor is out of bounds, don't draw garbage. This can happen |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9573 in mini-buffer windows when switching between echo area glyphs |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9574 and mini-buffer. */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9575 cursor_glyph = get_phys_cursor_glyph (w); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9576 if (cursor_glyph == NULL) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9577 return; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9578 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9579 /* If on an image, draw like a normal cursor. That's usually better |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9580 visible than drawing a bar, esp. if the image is large so that |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9581 the bar might not be in the window. */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9582 if (cursor_glyph->type == IMAGE_GLYPH) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9583 { |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9584 struct glyph_row *row; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9585 row = MATRIX_ROW (w->current_matrix, w->phys_cursor.vpos); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9586 x_draw_phys_cursor_glyph (w, row, DRAW_CURSOR); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9587 } |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9588 else |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9589 { |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9590 COLORREF cursor_color = f->output_data.w32->cursor_pixel; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9591 struct face *face = FACE_FROM_ID (f, cursor_glyph->face_id); |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9592 |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9593 /* If the glyph's background equals the color we normally draw |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9594 the bar cursor in, the bar cursor in its normal color is |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9595 invisible. Use the glyph's foreground color instead in this |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9596 case, on the assumption that the glyph's colors are chosen so |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9597 that the glyph is legible. */ |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9598 if (face->background == cursor_color) |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9599 cursor_color = face->foreground; |
|
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9600 |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9601 x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9602 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9603 if (width < 0) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9604 width = FRAME_CURSOR_WIDTH (f); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9605 width = min (cursor_glyph->pixel_width, width); |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9606 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9607 w->phys_cursor_width = width; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9608 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9609 |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9610 hdc = get_frame_dc (f); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9611 w32_clip_to_row (w, row, hdc, 0); |
|
45467
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9612 |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9613 if (kind == BAR_CURSOR) |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9614 { |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9615 w32_fill_area (f, hdc, cursor_color, x, |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9616 WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y), |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9617 width, row->height); |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9618 } |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9619 else |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9620 { |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9621 w32_fill_area (f, hdc, cursor_color, x, |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9622 WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y + |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9623 row->height - width), |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9624 cursor_glyph->pixel_width, width); |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9625 } |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9626 |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9627 w32_set_clip_rectangle (hdc, NULL); |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9628 release_frame_dc (f, hdc); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9629 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9630 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9631 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9632 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9633 /* Clear the cursor of window W to background color, and mark the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9634 cursor as not shown. This is used when the text where the cursor |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9635 is is about to be rewritten. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9636 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9637 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9638 x_clear_cursor (w) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9639 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9640 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9641 if (FRAME_VISIBLE_P (XFRAME (w->frame)) && w->phys_cursor_on_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9642 x_update_window_cursor (w, 0); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9643 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9644 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9645 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9646 /* Draw the cursor glyph of window W in glyph row ROW. See the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9647 comment of x_draw_glyphs for the meaning of HL. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9648 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9649 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9650 x_draw_phys_cursor_glyph (w, row, hl) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9651 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9652 struct glyph_row *row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9653 enum draw_glyphs_face hl; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9654 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9655 /* If cursor hpos is out of bounds, don't draw garbage. This can |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9656 happen in mini-buffer windows when switching between echo area |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9657 glyphs and mini-buffer. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9658 if (w->phys_cursor.hpos < row->used[TEXT_AREA]) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9659 { |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9660 int on_p = w->phys_cursor_on_p; |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9661 int x1; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9662 x1 = x_draw_glyphs (w, w->phys_cursor.x, row, TEXT_AREA, |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9663 w->phys_cursor.hpos, w->phys_cursor.hpos + 1, |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9664 hl, 0); |
|
41249
2043af2d023f
(note_mouse_highlight): Fix type of variable `ignore'.
Jason Rumney <jasonr@gnu.org>
parents:
41125
diff
changeset
|
9665 w->phys_cursor_on_p = on_p; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9666 |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9667 if (hl == DRAW_CURSOR) |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9668 w->phys_cursor_width = x1 - w->phys_cursor.x; |
|
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9669 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9670 /* When we erase the cursor, and ROW is overlapped by other |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9671 rows, make sure that these overlapping parts of other rows |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9672 are redrawn. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9673 if (hl == DRAW_NORMAL_TEXT && row->overlapped_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9674 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9675 if (row > w->current_matrix->rows |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9676 && MATRIX_ROW_OVERLAPS_SUCC_P (row - 1)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9677 x_fix_overlapping_area (w, row - 1, TEXT_AREA); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9678 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9679 if (MATRIX_ROW_BOTTOM_Y (row) < window_text_bottom_y (w) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9680 && MATRIX_ROW_OVERLAPS_PRED_P (row + 1)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9681 x_fix_overlapping_area (w, row + 1, TEXT_AREA); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9682 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9683 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9684 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9685 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9686 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9687 /* Erase the image of a cursor of window W from the screen. */ |
| 13434 | 9688 |
| 9689 static void | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9690 x_erase_phys_cursor (w) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9691 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9692 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9693 struct frame *f = XFRAME (w->frame); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9694 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9695 int hpos = w->phys_cursor.hpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9696 int vpos = w->phys_cursor.vpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9697 int mouse_face_here_p = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9698 struct glyph_matrix *active_glyphs = w->current_matrix; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9699 struct glyph_row *cursor_row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9700 struct glyph *cursor_glyph; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9701 enum draw_glyphs_face hl; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9702 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9703 /* No cursor displayed or row invalidated => nothing to do on the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9704 screen. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9705 if (w->phys_cursor_type == NO_CURSOR) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9706 goto mark_cursor_off; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9707 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9708 /* VPOS >= active_glyphs->nrows means that window has been resized. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9709 Don't bother to erase the cursor. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9710 if (vpos >= active_glyphs->nrows) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9711 goto mark_cursor_off; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9712 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9713 /* If row containing cursor is marked invalid, there is nothing we |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9714 can do. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9715 cursor_row = MATRIX_ROW (active_glyphs, vpos); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9716 if (!cursor_row->enabled_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9717 goto mark_cursor_off; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9718 |
|
42794
dee88a860452
(x_erase_phys_cursor): Don't erase cursor if cursor row
Kim F. Storm <storm@cua.dk>
parents:
42720
diff
changeset
|
9719 /* If row is completely invisible, don't attempt to delete a cursor which |
|
dee88a860452
(x_erase_phys_cursor): Don't erase cursor if cursor row
Kim F. Storm <storm@cua.dk>
parents:
42720
diff
changeset
|
9720 isn't there. This may happen if cursor is at top of window, and |
|
dee88a860452
(x_erase_phys_cursor): Don't erase cursor if cursor row
Kim F. Storm <storm@cua.dk>
parents:
42720
diff
changeset
|
9721 we switch to a buffer with a header line in that window. */ |
|
dee88a860452
(x_erase_phys_cursor): Don't erase cursor if cursor row
Kim F. Storm <storm@cua.dk>
parents:
42720
diff
changeset
|
9722 if (cursor_row->visible_height <= 0) |
|
dee88a860452
(x_erase_phys_cursor): Don't erase cursor if cursor row
Kim F. Storm <storm@cua.dk>
parents:
42720
diff
changeset
|
9723 goto mark_cursor_off; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9724 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9725 /* This can happen when the new row is shorter than the old one. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9726 In this case, either x_draw_glyphs or clear_end_of_line |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9727 should have cleared the cursor. Note that we wouldn't be |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9728 able to erase the cursor in this case because we don't have a |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9729 cursor glyph at hand. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9730 if (w->phys_cursor.hpos >= cursor_row->used[TEXT_AREA]) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9731 goto mark_cursor_off; |
|
47099
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
9732 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9733 /* If the cursor is in the mouse face area, redisplay that when |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9734 we clear the cursor. */ |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9735 if (! NILP (dpyinfo->mouse_face_window) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
9736 && w == XWINDOW (dpyinfo->mouse_face_window) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9737 && (vpos > dpyinfo->mouse_face_beg_row |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9738 || (vpos == dpyinfo->mouse_face_beg_row |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9739 && hpos >= dpyinfo->mouse_face_beg_col)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9740 && (vpos < dpyinfo->mouse_face_end_row |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9741 || (vpos == dpyinfo->mouse_face_end_row |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9742 && hpos < dpyinfo->mouse_face_end_col)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9743 /* Don't redraw the cursor's spot in mouse face if it is at the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9744 end of a line (on a newline). The cursor appears there, but |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9745 mouse highlighting does not. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9746 && cursor_row->used[TEXT_AREA] > hpos) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9747 mouse_face_here_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9748 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9749 /* Maybe clear the display under the cursor. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9750 if (w->phys_cursor_type == HOLLOW_BOX_CURSOR) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9751 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9752 int x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9753 int header_line_height = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (w); |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
9754 HDC hdc; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9755 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9756 cursor_glyph = get_phys_cursor_glyph (w); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9757 if (cursor_glyph == NULL) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9758 goto mark_cursor_off; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9759 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9760 x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
9761 |
|
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
9762 hdc = get_frame_dc (f); |
|
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
9763 w32_clear_area (f, hdc, x, |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9764 WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9765 cursor_row->y)), |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9766 cursor_glyph->pixel_width, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9767 cursor_row->visible_height); |
|
27406
fb36ccd8457c
(w32_fill_rect): Do not try to deal with NULL hdc
Jason Rumney <jasonr@gnu.org>
parents:
27402
diff
changeset
|
9768 release_frame_dc (f, hdc); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9769 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9770 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9771 /* Erase the cursor by redrawing the character underneath it. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9772 if (mouse_face_here_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9773 hl = DRAW_MOUSE_FACE; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9774 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9775 hl = DRAW_NORMAL_TEXT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9776 x_draw_phys_cursor_glyph (w, cursor_row, hl); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9777 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9778 mark_cursor_off: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9779 w->phys_cursor_on_p = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9780 w->phys_cursor_type = NO_CURSOR; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9781 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9782 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9783 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9784 /* Non-zero if physical cursor of window W is within mouse face. */ |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9785 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9786 static int |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9787 cursor_in_mouse_face_p (w) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9788 struct window *w; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9789 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9790 struct w32_display_info *dpyinfo |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9791 = FRAME_W32_DISPLAY_INFO (XFRAME (w->frame)); |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9792 int in_mouse_face = 0; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9793 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9794 if (WINDOWP (dpyinfo->mouse_face_window) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9795 && XWINDOW (dpyinfo->mouse_face_window) == w) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9796 { |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9797 int hpos = w->phys_cursor.hpos; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9798 int vpos = w->phys_cursor.vpos; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9799 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9800 if (vpos >= dpyinfo->mouse_face_beg_row |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9801 && vpos <= dpyinfo->mouse_face_end_row |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9802 && (vpos > dpyinfo->mouse_face_beg_row |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9803 || hpos >= dpyinfo->mouse_face_beg_col) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9804 && (vpos < dpyinfo->mouse_face_end_row |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9805 || hpos < dpyinfo->mouse_face_end_col |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9806 || dpyinfo->mouse_face_past_end)) |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9807 in_mouse_face = 1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9808 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9809 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9810 return in_mouse_face; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9811 } |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9812 |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
9813 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9814 /* Display or clear cursor of window W. If ON is zero, clear the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9815 cursor. If it is non-zero, display the cursor. If ON is nonzero, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9816 where to put the cursor is specified by HPOS, VPOS, X and Y. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9817 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9818 void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9819 x_display_and_set_cursor (w, on, hpos, vpos, x, y) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9820 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9821 int on, hpos, vpos, x, y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9822 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9823 struct frame *f = XFRAME (w->frame); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9824 int new_cursor_type; |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
9825 int new_cursor_width; |
|
47992
3762c0399817
(x_display_and_set_cursor): Get active_cursor from
Kim F. Storm <storm@cua.dk>
parents:
47981
diff
changeset
|
9826 int active_cursor; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9827 struct glyph_matrix *current_glyphs; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9828 struct glyph_row *glyph_row; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9829 struct glyph *glyph; |
| 13434 | 9830 |
| 9831 /* This is pointless on invisible frames, and dangerous on garbaged | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9832 windows and frames; in the latter case, the frame or window may |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9833 be in the midst of changing its size, and x and y may be off the |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9834 window. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9835 if (! FRAME_VISIBLE_P (f) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9836 || FRAME_GARBAGED_P (f) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9837 || vpos >= w->current_matrix->nrows |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9838 || hpos >= w->current_matrix->matrix_w) |
| 13434 | 9839 return; |
| 9840 | |
| 9841 /* If cursor is off and we want it off, return quickly. */ | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9842 if (!on && !w->phys_cursor_on_p) |
| 13434 | 9843 return; |
| 9844 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9845 current_glyphs = w->current_matrix; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9846 glyph_row = MATRIX_ROW (current_glyphs, vpos); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9847 glyph = glyph_row->glyphs[TEXT_AREA] + hpos; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9848 |
|
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9849 /* If cursor row is not enabled, we don't really know where to |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9850 display the cursor. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9851 if (!glyph_row->enabled_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9852 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9853 w->phys_cursor_on_p = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9854 return; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9855 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9856 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9857 xassert (interrupt_input_blocked); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9858 |
|
47143
264271f9ab24
(x_specified_cursor_type): Remove prototype.
Kim F. Storm <storm@cua.dk>
parents:
47099
diff
changeset
|
9859 /* Set new_cursor_type to the cursor we want to be displayed. */ |
|
47992
3762c0399817
(x_display_and_set_cursor): Get active_cursor from
Kim F. Storm <storm@cua.dk>
parents:
47981
diff
changeset
|
9860 new_cursor_type = get_window_cursor_type (w, &new_cursor_width, &active_cursor); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9861 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9862 /* If cursor is currently being shown and we don't want it to be or |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9863 it is in the wrong place, or the cursor type is not what we want, |
| 13434 | 9864 erase it. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9865 if (w->phys_cursor_on_p |
| 13434 | 9866 && (!on |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9867 || w->phys_cursor.x != x |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9868 || w->phys_cursor.y != y |
|
43694
2d2700949b8c
(x_display_and_set_cursor): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents:
43621
diff
changeset
|
9869 || new_cursor_type != w->phys_cursor_type |
|
47143
264271f9ab24
(x_specified_cursor_type): Remove prototype.
Kim F. Storm <storm@cua.dk>
parents:
47099
diff
changeset
|
9870 || ((new_cursor_type == BAR_CURSOR || new_cursor_type == HBAR_CURSOR) |
|
43621
7755c5d1d8b4
(x_display_and_set_cursor): Blink box cursor using
Kim F. Storm <storm@cua.dk>
parents:
43478
diff
changeset
|
9871 && new_cursor_width != w->phys_cursor_width))) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9872 x_erase_phys_cursor (w); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9873 |
|
47099
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
9874 /* Don't check phys_cursor_on_p here because that flag is only set |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
9875 to zero in some cases where we know that the cursor has been |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
9876 completely erased, to avoid the extra work of erasing the cursor |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
9877 twice. In other words, phys_cursor_on_p can be 1 and the cursor |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
9878 still not be visible, or it has only been partly erased. */ |
|
4a9df8aa130c
(x_display_and_set_cursor): Use FRAME_BLINK_OFF_CURSOR
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
9879 if (on) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9880 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9881 w->phys_cursor_ascent = glyph_row->ascent; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9882 w->phys_cursor_height = glyph_row->height; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
9883 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9884 /* Set phys_cursor_.* before x_draw_.* is called because some |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9885 of them may need the information. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9886 w->phys_cursor.x = x; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9887 w->phys_cursor.y = glyph_row->y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9888 w->phys_cursor.hpos = hpos; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9889 w->phys_cursor.vpos = vpos; |
|
42864
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9890 |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9891 /* If the user wants to use the system caret, make sure our own |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9892 cursor remains invisible. */ |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9893 if (w32_use_visible_system_caret) |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9894 { |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9895 if (w->phys_cursor_type != NO_CURSOR) |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9896 x_erase_phys_cursor (w); |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9897 |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9898 new_cursor_type = w->phys_cursor_type = NO_CURSOR; |
|
43621
7755c5d1d8b4
(x_display_and_set_cursor): Blink box cursor using
Kim F. Storm <storm@cua.dk>
parents:
43478
diff
changeset
|
9899 w->phys_cursor_width = -1; |
|
42864
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9900 } |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9901 else |
|
43621
7755c5d1d8b4
(x_display_and_set_cursor): Blink box cursor using
Kim F. Storm <storm@cua.dk>
parents:
43478
diff
changeset
|
9902 { |
|
7755c5d1d8b4
(x_display_and_set_cursor): Blink box cursor using
Kim F. Storm <storm@cua.dk>
parents:
43478
diff
changeset
|
9903 w->phys_cursor_type = new_cursor_type; |
|
7755c5d1d8b4
(x_display_and_set_cursor): Blink box cursor using
Kim F. Storm <storm@cua.dk>
parents:
43478
diff
changeset
|
9904 } |
|
42864
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9905 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9906 w->phys_cursor_on_p = 1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9907 |
|
40384
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
9908 /* If this is the active cursor, we need to track it with the |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
9909 system caret, so third party software like screen magnifiers |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
9910 and speech synthesizers can follow the cursor. */ |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
9911 if (active_cursor) |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
9912 { |
|
42864
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9913 HWND hwnd = FRAME_W32_WINDOW (f); |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9914 |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9915 w32_system_caret_x |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9916 = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9917 w32_system_caret_y |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9918 = (WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y) |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9919 + glyph_row->ascent - w->phys_cursor_ascent); |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9920 |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9921 /* If the size of the active cursor changed, destroy the old |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9922 system caret. */ |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9923 if (w32_system_caret_hwnd |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9924 && (w32_system_caret_height != w->phys_cursor_height)) |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9925 PostMessage (hwnd, WM_EMACS_DESTROY_CARET, 0, 0); |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9926 |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9927 w32_system_caret_height = w->phys_cursor_height; |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9928 |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9929 /* Move the system caret. */ |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
9930 PostMessage (hwnd, WM_EMACS_TRACK_CARET, 0, 0); |
|
40384
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
9931 } |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
9932 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9933 switch (new_cursor_type) |
| 13434 | 9934 { |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9935 case HOLLOW_BOX_CURSOR: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9936 x_draw_hollow_cursor (w, glyph_row); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9937 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9938 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9939 case FILLED_BOX_CURSOR: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9940 x_draw_phys_cursor_glyph (w, glyph_row, DRAW_CURSOR); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9941 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9942 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9943 case BAR_CURSOR: |
|
45467
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9944 x_draw_bar_cursor (w, glyph_row, new_cursor_width, BAR_CURSOR); |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9945 break; |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9946 |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9947 case HBAR_CURSOR: |
|
583ed47de245
(x_draw_bar_cursor): New argument KIND; callers changed.
Jason Rumney <jasonr@gnu.org>
parents:
45196
diff
changeset
|
9948 x_draw_bar_cursor (w, glyph_row, new_cursor_width, HBAR_CURSOR); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9949 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9950 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9951 case NO_CURSOR: |
|
49393
85246e86a2cd
* w32term.c (x_draw_glyph_string_foreground)
Jason Rumney <jasonr@gnu.org>
parents:
49371
diff
changeset
|
9952 w->phys_cursor_width = 0; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9953 break; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9954 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9955 default: |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9956 abort (); |
| 13434 | 9957 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9958 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9959 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9960 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9961 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9962 /* Display the cursor on window W, or clear it. X and Y are window |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9963 relative pixel coordinates. HPOS and VPOS are glyph matrix |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9964 positions. If W is not the selected window, display a hollow |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9965 cursor. ON non-zero means display the cursor at X, Y which |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9966 correspond to HPOS, VPOS, otherwise it is cleared. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9967 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9968 void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9969 x_display_cursor (w, on, hpos, vpos, x, y) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9970 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9971 int on, hpos, vpos, x, y; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9972 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9973 BLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9974 x_display_and_set_cursor (w, on, hpos, vpos, x, y); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9975 UNBLOCK_INPUT; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9976 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9977 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9978 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9979 /* Display the cursor on window W, or clear it, according to ON_P. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9980 Don't change the cursor's position. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9981 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9982 void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9983 x_update_cursor (f, on_p) |
| 13434 | 9984 struct frame *f; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9985 int on_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9986 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9987 x_update_cursor_in_window_tree (XWINDOW (f->root_window), on_p); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9988 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9989 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9990 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9991 /* Call x_update_window_cursor with parameter ON_P on all leaf windows |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9992 in the window tree rooted at W. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9993 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9994 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9995 x_update_cursor_in_window_tree (w, on_p) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9996 struct window *w; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9997 int on_p; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9998 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
9999 while (w) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10000 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10001 if (!NILP (w->hchild)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10002 x_update_cursor_in_window_tree (XWINDOW (w->hchild), on_p); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10003 else if (!NILP (w->vchild)) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10004 x_update_cursor_in_window_tree (XWINDOW (w->vchild), on_p); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10005 else |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10006 x_update_window_cursor (w, on_p); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10007 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10008 w = NILP (w->next) ? 0 : XWINDOW (w->next); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10009 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10010 } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10011 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10012 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10013 /* Switch the display of W's cursor on or off, according to the value |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10014 of ON. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10015 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10016 static void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10017 x_update_window_cursor (w, on) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10018 struct window *w; |
| 13434 | 10019 int on; |
| 10020 { | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10021 /* Don't update cursor in windows whose frame is in the process |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10022 of being deleted. */ |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10023 if (w->current_matrix) |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10024 { |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10025 BLOCK_INPUT; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10026 x_display_and_set_cursor (w, on, w->phys_cursor.hpos, |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10027 w->phys_cursor.vpos, w->phys_cursor.x, |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10028 w->phys_cursor.y); |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10029 UNBLOCK_INPUT; |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10030 } |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10031 } |
|
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10032 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10033 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10034 |
| 13434 | 10035 |
|
25236
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10036 /* Icons. */ |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10037 |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10038 int |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10039 x_bitmap_icon (f, icon) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10040 struct frame *f; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10041 Lisp_Object icon; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10042 { |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10043 HANDLE hicon; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10044 |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10045 if (FRAME_W32_WINDOW (f) == 0) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10046 return 1; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10047 |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10048 if (NILP (icon)) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10049 hicon = LoadIcon (hinst, EMACS_CLASS); |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10050 else if (STRINGP (icon)) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
10051 hicon = LoadImage (NULL, (LPCTSTR) SDATA (icon), IMAGE_ICON, 0, 0, |
|
25236
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10052 LR_DEFAULTSIZE | LR_LOADFROMFILE); |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10053 else if (SYMBOLP (icon)) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10054 { |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10055 LPCTSTR name; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10056 |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10057 if (EQ (icon, intern ("application"))) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10058 name = (LPCTSTR) IDI_APPLICATION; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10059 else if (EQ (icon, intern ("hand"))) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10060 name = (LPCTSTR) IDI_HAND; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10061 else if (EQ (icon, intern ("question"))) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10062 name = (LPCTSTR) IDI_QUESTION; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10063 else if (EQ (icon, intern ("exclamation"))) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10064 name = (LPCTSTR) IDI_EXCLAMATION; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10065 else if (EQ (icon, intern ("asterisk"))) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10066 name = (LPCTSTR) IDI_ASTERISK; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10067 else if (EQ (icon, intern ("winlogo"))) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10068 name = (LPCTSTR) IDI_WINLOGO; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10069 else |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10070 return 1; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10071 |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10072 hicon = LoadIcon (NULL, name); |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10073 } |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10074 else |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10075 return 1; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10076 |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10077 if (hicon == NULL) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10078 return 1; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10079 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10080 PostMessage (FRAME_W32_WINDOW (f), WM_SETICON, (WPARAM) ICON_BIG, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10081 (LPARAM) hicon); |
|
25236
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10082 |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10083 return 0; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10084 } |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10085 |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10086 |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10087 /************************************************************************ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10088 Handling X errors |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10089 ************************************************************************/ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10090 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10091 /* Display Error Handling functions not used on W32. Listing them here |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10092 helps diff stay in step when comparing w32term.c with xterm.c. |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10093 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10094 x_error_catcher (display, error) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10095 x_catch_errors (dpy) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10096 x_catch_errors_unwind (old_val) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10097 x_check_errors (dpy, format) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10098 x_had_errors_p (dpy) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10099 x_clear_errors (dpy) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10100 x_uncatch_errors (dpy, count) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10101 x_trace_wire () |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10102 x_connection_signal (signalnum) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10103 x_connection_closed (dpy, error_message) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10104 x_error_quitter (display, error) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10105 x_error_handler (display, error) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10106 x_io_error_quitter (display) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10107 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10108 */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10109 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10110 |
| 13434 | 10111 /* Changing the font of the frame. */ |
| 10112 | |
| 10113 /* Give frame F the font named FONTNAME as its default font, and | |
| 10114 return the full name of that font. FONTNAME may be a wildcard | |
| 10115 pattern; in that case, we choose some font that fits the pattern. | |
| 10116 The return value shows which font we chose. */ | |
| 10117 | |
| 10118 Lisp_Object | |
| 10119 x_new_font (f, fontname) | |
| 10120 struct frame *f; | |
| 10121 register char *fontname; | |
| 10122 { | |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10123 struct font_info *fontp |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
10124 = FS_LOAD_FONT (f, 0, fontname, -1); |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10125 |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10126 if (!fontp) |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10127 return Qnil; |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10128 |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10129 FRAME_FONT (f) = (XFontStruct *) (fontp->font); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10130 FRAME_BASELINE_OFFSET (f) = fontp->baseline_offset; |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10131 FRAME_FONTSET (f) = -1; |
| 13434 | 10132 |
| 10133 /* Compute the scroll bar width in character columns. */ | |
| 10134 if (f->scroll_bar_pixel_width > 0) | |
| 10135 { | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10136 int wid = FONT_WIDTH (FRAME_FONT (f)); |
| 13434 | 10137 f->scroll_bar_cols = (f->scroll_bar_pixel_width + wid-1) / wid; |
| 10138 } | |
| 10139 else | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10140 { |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10141 int wid = FONT_WIDTH (FRAME_FONT (f)); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10142 f->scroll_bar_cols = (14 + wid - 1) / wid; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10143 } |
| 13434 | 10144 |
| 10145 /* Now make the frame display the given font. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10146 if (FRAME_W32_WINDOW (f) != 0) |
| 13434 | 10147 { |
| 10148 frame_update_line_height (f); | |
|
36002
205727d5d63c
(w32_encode_char): Treat eight bit graphic and control
Jason Rumney <jasonr@gnu.org>
parents:
35984
diff
changeset
|
10149 if (NILP (tip_frame) || XFRAME (tip_frame) != f) |
|
205727d5d63c
(w32_encode_char): Treat eight bit graphic and control
Jason Rumney <jasonr@gnu.org>
parents:
35984
diff
changeset
|
10150 x_set_window_size (f, 0, f->width, f->height); |
| 13434 | 10151 } |
| 10152 else | |
| 10153 /* If we are setting a new frame's font for the first time, | |
| 10154 there are no faces yet, so this font's height is the line height. */ | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10155 f->output_data.w32->line_height = FONT_HEIGHT (FRAME_FONT (f)); |
| 13434 | 10156 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10157 return build_string (fontp->full_name); |
| 13434 | 10158 } |
| 10159 | |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10160 /* Give frame F the fontset named FONTSETNAME as its default font, and |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10161 return the full name of that fontset. FONTSETNAME may be a wildcard |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10162 pattern; in that case, we choose some fontset that fits the pattern. |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10163 The return value shows which fontset we chose. */ |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10164 |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10165 Lisp_Object |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10166 x_new_fontset (f, fontsetname) |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10167 struct frame *f; |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10168 char *fontsetname; |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10169 { |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
10170 int fontset = fs_query_fontset (build_string (fontsetname), 0); |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10171 Lisp_Object result; |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10172 |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10173 if (fontset < 0) |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10174 return Qnil; |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10175 |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10176 if (FRAME_FONTSET (f) == fontset) |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10177 /* This fontset is already set in frame F. There's nothing more |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10178 to do. */ |
|
28369
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
10179 return fontset_name (fontset); |
|
3fb90cd81d3b
(w32_read_socket): Handle WM_MENUSELECT message.
Jason Rumney <jasonr@gnu.org>
parents:
27937
diff
changeset
|
10180 |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
10181 result = x_new_font (f, (SDATA (fontset_ascii (fontset)))); |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10182 |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10183 if (!STRINGP (result)) |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10184 /* Can't load ASCII font. */ |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10185 return Qnil; |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10186 |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10187 /* Since x_new_font doesn't update any fontset information, do it now. */ |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10188 FRAME_FONTSET(f) = fontset; |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10189 |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10190 return build_string (fontsetname); |
|
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10191 } |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10192 |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10193 /* Compute actual fringe widths */ |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10194 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10195 void |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10196 x_compute_fringe_widths (f, redraw) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10197 struct frame *f; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10198 int redraw; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10199 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10200 int o_left = f->output_data.w32->left_fringe_width; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10201 int o_right = f->output_data.w32->right_fringe_width; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10202 int o_cols = f->output_data.w32->fringe_cols; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10203 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10204 Lisp_Object left_fringe = Fassq (Qleft_fringe, f->param_alist); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10205 Lisp_Object right_fringe = Fassq (Qright_fringe, f->param_alist); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10206 int left_fringe_width, right_fringe_width; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10207 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10208 if (!NILP (left_fringe)) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10209 left_fringe = Fcdr (left_fringe); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10210 if (!NILP (right_fringe)) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10211 right_fringe = Fcdr (right_fringe); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10212 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10213 left_fringe_width = ((NILP (left_fringe) || !INTEGERP (left_fringe)) ? 8 : |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10214 XINT (left_fringe)); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10215 right_fringe_width = ((NILP (right_fringe) || !INTEGERP (right_fringe)) ? 8 : |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10216 XINT (right_fringe)); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10217 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10218 if (left_fringe_width || right_fringe_width) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10219 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10220 int left_wid = left_fringe_width >= 0 ? left_fringe_width : -left_fringe_width; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10221 int right_wid = right_fringe_width >= 0 ? right_fringe_width : -right_fringe_width; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10222 int conf_wid = left_wid + right_wid; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10223 int font_wid = FONT_WIDTH (f->output_data.w32->font); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10224 int cols = (left_wid + right_wid + font_wid-1) / font_wid; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10225 int real_wid = cols * font_wid; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10226 if (left_wid && right_wid) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10227 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10228 if (left_fringe_width < 0) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10229 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10230 /* Left fringe width is fixed, adjust right fringe if necessary */ |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10231 f->output_data.w32->left_fringe_width = left_wid; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10232 f->output_data.w32->right_fringe_width = real_wid - left_wid; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10233 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10234 else if (right_fringe_width < 0) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10235 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10236 /* Right fringe width is fixed, adjust left fringe if necessary */ |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10237 f->output_data.w32->left_fringe_width = real_wid - right_wid; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10238 f->output_data.w32->right_fringe_width = right_wid; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10239 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10240 else |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10241 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10242 /* Adjust both fringes with an equal amount. |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10243 Note that we are doing integer arithmetic here, so don't |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10244 lose a pixel if the total width is an odd number. */ |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10245 int fill = real_wid - conf_wid; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10246 f->output_data.w32->left_fringe_width = left_wid + fill/2; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10247 f->output_data.w32->right_fringe_width = right_wid + fill - fill/2; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10248 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10249 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10250 else if (left_fringe_width) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10251 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10252 f->output_data.w32->left_fringe_width = real_wid; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10253 f->output_data.w32->right_fringe_width = 0; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10254 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10255 else |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10256 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10257 f->output_data.w32->left_fringe_width = 0; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10258 f->output_data.w32->right_fringe_width = real_wid; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10259 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10260 f->output_data.w32->fringe_cols = cols; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10261 f->output_data.w32->fringes_extra = real_wid; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10262 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10263 else |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10264 { |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10265 f->output_data.w32->left_fringe_width = 0; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10266 f->output_data.w32->right_fringe_width = 0; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10267 f->output_data.w32->fringe_cols = 0; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10268 f->output_data.w32->fringes_extra = 0; |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10269 } |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10270 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10271 if (redraw && FRAME_VISIBLE_P (f)) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10272 if (o_left != f->output_data.w32->left_fringe_width || |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10273 o_right != f->output_data.w32->right_fringe_width || |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10274 o_cols != f->output_data.w32->fringe_cols) |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10275 redraw_frame (f); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10276 } |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10277 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10278 /*********************************************************************** |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10279 TODO: W32 Input Methods |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10280 ***********************************************************************/ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10281 /* Listing missing functions from xterm.c helps diff stay in step. |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10282 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10283 xim_destroy_callback (xim, client_data, call_data) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10284 xim_open_dpy (dpyinfo, resource_name) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10285 struct xim_inst_t |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10286 xim_instantiate_callback (display, client_data, call_data) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10287 xim_initialize (dpyinfo, resource_name) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10288 xim_close_dpy (dpyinfo) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10289 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10290 */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10291 |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10292 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10293 /* Calculate the absolute position in frame F |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10294 from its current recorded position values and gravity. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10295 |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10296 void |
| 13434 | 10297 x_calc_absolute_position (f) |
| 10298 struct frame *f; | |
| 10299 { | |
| 10300 POINT pt; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10301 int flags = f->output_data.w32->size_hint_flags; |
| 13434 | 10302 |
| 10303 pt.x = pt.y = 0; | |
| 10304 | |
| 10305 /* Find the position of the outside upper-left corner of | |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10306 the inner window, with respect to the outer window. |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10307 But do this only if we will need the results. */ |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10308 if (f->output_data.w32->parent_desc != FRAME_W32_DISPLAY_INFO (f)->root_window) |
| 13434 | 10309 { |
| 10310 BLOCK_INPUT; | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10311 MapWindowPoints (FRAME_W32_WINDOW (f), |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10312 f->output_data.w32->parent_desc, |
| 13434 | 10313 &pt, 1); |
| 10314 UNBLOCK_INPUT; | |
| 10315 } | |
| 10316 | |
| 10317 { | |
| 10318 RECT rt; | |
| 10319 rt.left = rt.right = rt.top = rt.bottom = 0; | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10320 |
| 13434 | 10321 BLOCK_INPUT; |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10322 AdjustWindowRect(&rt, f->output_data.w32->dwStyle, |
|
14351
fb2ce4ebc871
ubackout 1.3 and 1.4
Geoff Voelker <voelker@cs.washington.edu>
parents:
14248
diff
changeset
|
10323 FRAME_EXTERNAL_MENU_BAR (f)); |
| 13434 | 10324 UNBLOCK_INPUT; |
| 10325 | |
| 10326 pt.x += (rt.right - rt.left); | |
| 10327 pt.y += (rt.bottom - rt.top); | |
| 10328 } | |
| 10329 | |
| 10330 /* Treat negative positions as relative to the leftmost bottommost | |
| 10331 position that fits on the screen. */ | |
| 10332 if (flags & XNegative) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10333 f->output_data.w32->left_pos = (FRAME_W32_DISPLAY_INFO (f)->width |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10334 - 2 * f->output_data.w32->border_width - pt.x |
| 13434 | 10335 - PIXEL_WIDTH (f) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10336 + f->output_data.w32->left_pos); |
|
30988
a69a2ac4345b
(help_echo_window): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
30730
diff
changeset
|
10337 |
| 13434 | 10338 if (flags & YNegative) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10339 f->output_data.w32->top_pos = (FRAME_W32_DISPLAY_INFO (f)->height |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10340 - 2 * f->output_data.w32->border_width - pt.y |
| 13434 | 10341 - PIXEL_HEIGHT (f) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10342 + f->output_data.w32->top_pos); |
| 13434 | 10343 /* The left_pos and top_pos |
| 10344 are now relative to the top and left screen edges, | |
| 10345 so the flags should correspond. */ | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10346 f->output_data.w32->size_hint_flags &= ~ (XNegative | YNegative); |
| 13434 | 10347 } |
| 10348 | |
| 10349 /* CHANGE_GRAVITY is 1 when calling from Fset_frame_position, | |
| 10350 to really change the position, and 0 when calling from | |
| 10351 x_make_frame_visible (in that case, XOFF and YOFF are the current | |
| 10352 position values). It is -1 when calling from x_set_frame_parameters, | |
| 10353 which means, do adjust for borders but don't change the gravity. */ | |
| 10354 | |
|
29321
8e2be36bb1c6
Format and doc changes to bring closer to xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
28369
diff
changeset
|
10355 void |
| 13434 | 10356 x_set_offset (f, xoff, yoff, change_gravity) |
| 10357 struct frame *f; | |
| 10358 register int xoff, yoff; | |
| 10359 int change_gravity; | |
| 10360 { | |
| 10361 int modified_top, modified_left; | |
| 10362 | |
| 10363 if (change_gravity > 0) | |
| 10364 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10365 f->output_data.w32->top_pos = yoff; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10366 f->output_data.w32->left_pos = xoff; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10367 f->output_data.w32->size_hint_flags &= ~ (XNegative | YNegative); |
| 13434 | 10368 if (xoff < 0) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10369 f->output_data.w32->size_hint_flags |= XNegative; |
| 13434 | 10370 if (yoff < 0) |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10371 f->output_data.w32->size_hint_flags |= YNegative; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10372 f->output_data.w32->win_gravity = NorthWestGravity; |
| 13434 | 10373 } |
| 10374 x_calc_absolute_position (f); | |
| 10375 | |
| 10376 BLOCK_INPUT; | |
| 10377 x_wm_set_size_hint (f, (long) 0, 0); | |
| 10378 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10379 modified_left = f->output_data.w32->left_pos; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10380 modified_top = f->output_data.w32->top_pos; |
| 13434 | 10381 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10382 my_set_window_pos (FRAME_W32_WINDOW (f), |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
10383 NULL, |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
10384 modified_left, modified_top, |
|
23507
8a448630a9b5
Include fontset.h. Define codepage macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
22059
diff
changeset
|
10385 0, 0, |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10386 SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE); |
| 13434 | 10387 UNBLOCK_INPUT; |
| 10388 } | |
| 10389 | |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10390 |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10391 /* Check if we need to resize the frame due to a fullscreen request. |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10392 If so needed, resize the frame. */ |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10393 static void |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10394 x_check_fullscreen (f) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10395 struct frame *f; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10396 { |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10397 if (f->output_data.w32->want_fullscreen & FULLSCREEN_BOTH) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10398 { |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10399 int width, height, ign; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10400 |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10401 x_real_positions (f, &f->output_data.w32->left_pos, |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10402 &f->output_data.w32->top_pos); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10403 |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10404 x_fullscreen_adjust (f, &width, &height, &ign, &ign); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10405 |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10406 /* We do not need to move the window, it shall be taken care of |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10407 when setting WM manager hints. |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10408 If the frame is visible already, the position is checked by |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10409 x_check_fullscreen_move. */ |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10410 if (f->width != width || f->height != height) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10411 { |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10412 change_frame_size (f, height, width, 0, 1, 0); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10413 SET_FRAME_GARBAGED (f); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10414 cancel_mouse_face (f); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10415 |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10416 /* Wait for the change of frame size to occur */ |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10417 f->output_data.w32->want_fullscreen |= FULLSCREEN_WAIT; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10418 } |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10419 } |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10420 } |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10421 |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10422 /* If frame parameters are set after the frame is mapped, we need to move |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10423 the window. This is done in xfns.c. |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10424 Some window managers moves the window to the right position, some |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10425 moves the outer window manager window to the specified position. |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10426 Here we check that we are in the right spot. If not, make a second |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10427 move, assuming we are dealing with the second kind of window manager. */ |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10428 static void |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10429 x_check_fullscreen_move (f) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10430 struct frame *f; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10431 { |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10432 if (f->output_data.w32->want_fullscreen & FULLSCREEN_MOVE_WAIT) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10433 { |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10434 int expect_top = f->output_data.w32->top_pos; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10435 int expect_left = f->output_data.w32->left_pos; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10436 |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10437 if (f->output_data.w32->want_fullscreen & FULLSCREEN_HEIGHT) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10438 expect_top = 0; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10439 if (f->output_data.w32->want_fullscreen & FULLSCREEN_WIDTH) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10440 expect_left = 0; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10441 |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10442 if (expect_top != f->output_data.w32->top_pos |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10443 || expect_left != f->output_data.w32->left_pos) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10444 x_set_offset (f, expect_left, expect_top, 1); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10445 |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10446 /* Just do this once */ |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10447 f->output_data.w32->want_fullscreen &= ~FULLSCREEN_MOVE_WAIT; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10448 } |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10449 } |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10450 |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10451 |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10452 /* Calculate fullscreen size. Return in *TOP_POS and *LEFT_POS the |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10453 wanted positions of the WM window (not emacs window). |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10454 Return in *WIDTH and *HEIGHT the wanted width and height of Emacs |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10455 window (FRAME_X_WINDOW). |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10456 */ |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10457 void |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10458 x_fullscreen_adjust (f, width, height, top_pos, left_pos) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10459 struct frame *f; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10460 int *width; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10461 int *height; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10462 int *top_pos; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10463 int *left_pos; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10464 { |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10465 int newwidth = f->width, newheight = f->height; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10466 |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10467 *top_pos = f->output_data.w32->top_pos; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10468 *left_pos = f->output_data.w32->left_pos; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10469 |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10470 if (f->output_data.w32->want_fullscreen & FULLSCREEN_HEIGHT) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10471 { |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10472 int ph; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10473 |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10474 ph = FRAME_X_DISPLAY_INFO (f)->height; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10475 newheight = PIXEL_TO_CHAR_HEIGHT (f, ph); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10476 ph = CHAR_TO_PIXEL_HEIGHT (f, newheight) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10477 - f->output_data.w32->y_pixels_diff; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10478 newheight = PIXEL_TO_CHAR_HEIGHT (f, ph); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10479 *top_pos = 0; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10480 } |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10481 |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10482 if (f->output_data.w32->want_fullscreen & FULLSCREEN_WIDTH) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10483 { |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10484 int pw; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10485 |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10486 pw = FRAME_X_DISPLAY_INFO (f)->width; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10487 newwidth = PIXEL_TO_CHAR_WIDTH (f, pw); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10488 pw = CHAR_TO_PIXEL_WIDTH (f, newwidth) |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10489 - f->output_data.w32->x_pixels_diff; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10490 newwidth = PIXEL_TO_CHAR_WIDTH (f, pw); |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10491 *left_pos = 0; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10492 } |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10493 |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10494 *width = newwidth; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10495 *height = newheight; |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10496 } |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10497 |
|
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
10498 |
| 13434 | 10499 /* Call this to change the size of frame F's x-window. |
| 10500 If CHANGE_GRAVITY is 1, we change to top-left-corner window gravity | |
| 10501 for this size change and subsequent size changes. | |
| 10502 Otherwise we leave the window gravity unchanged. */ | |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10503 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10504 void |
| 13434 | 10505 x_set_window_size (f, change_gravity, cols, rows) |
| 10506 struct frame *f; | |
| 10507 int change_gravity; | |
| 10508 int cols, rows; | |
| 10509 { | |
| 10510 int pixelwidth, pixelheight; | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10511 |
| 13434 | 10512 BLOCK_INPUT; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10513 |
| 13434 | 10514 check_frame_size (f, &rows, &cols); |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10515 f->output_data.w32->vertical_scroll_bar_extra |
| 13434 | 10516 = (!FRAME_HAS_VERTICAL_SCROLL_BARS (f) |
| 10517 ? 0 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10518 : (FRAME_SCROLL_BAR_COLS (f) * FONT_WIDTH (f->output_data.w32->font))); |
|
41727
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10519 |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10520 x_compute_fringe_widths (f, 0); |
|
d5baaa7df054
Merged fringe width related changes from xterm.c.
Kim F. Storm <storm@cua.dk>
parents:
41639
diff
changeset
|
10521 |
| 13434 | 10522 pixelwidth = CHAR_TO_PIXEL_WIDTH (f, cols); |
| 10523 pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows); | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10524 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10525 f->output_data.w32->win_gravity = NorthWestGravity; |
| 13434 | 10526 x_wm_set_size_hint (f, (long) 0, 0); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10527 |
| 13434 | 10528 { |
| 10529 RECT rect; | |
| 10530 | |
| 10531 rect.left = rect.top = 0; | |
| 10532 rect.right = pixelwidth; | |
| 10533 rect.bottom = pixelheight; | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10534 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10535 AdjustWindowRect(&rect, f->output_data.w32->dwStyle, |
|
14351
fb2ce4ebc871
ubackout 1.3 and 1.4
Geoff Voelker <voelker@cs.washington.edu>
parents:
14248
diff
changeset
|
10536 FRAME_EXTERNAL_MENU_BAR (f)); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10537 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10538 my_set_window_pos (FRAME_W32_WINDOW (f), |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10539 NULL, |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
10540 0, 0, |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10541 rect.right - rect.left, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10542 rect.bottom - rect.top, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10543 SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE); |
| 13434 | 10544 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10545 |
| 13434 | 10546 /* Now, strictly speaking, we can't be sure that this is accurate, |
| 10547 but the window manager will get around to dealing with the size | |
| 10548 change request eventually, and we'll hear how it went when the | |
| 10549 ConfigureNotify event gets here. | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10550 |
| 13434 | 10551 We could just not bother storing any of this information here, |
| 10552 and let the ConfigureNotify event set everything up, but that | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10553 might be kind of confusing to the Lisp code, since size changes |
| 13434 | 10554 wouldn't be reported in the frame parameters until some random |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10555 point in the future when the ConfigureNotify event arrives. |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10556 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10557 We pass 1 for DELAY since we can't run Lisp code inside of |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10558 a BLOCK_INPUT. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10559 change_frame_size (f, rows, cols, 0, 1, 0); |
| 13434 | 10560 PIXEL_WIDTH (f) = pixelwidth; |
| 10561 PIXEL_HEIGHT (f) = pixelheight; | |
| 10562 | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10563 /* We've set {FRAME,PIXEL}_{WIDTH,HEIGHT} to the values we hope to |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10564 receive in the ConfigureNotify event; if we get what we asked |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10565 for, then the event won't cause the screen to become garbaged, so |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10566 we have to make sure to do it here. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10567 SET_FRAME_GARBAGED (f); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10568 |
| 13434 | 10569 /* If cursor was outside the new size, mark it as off. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10570 mark_window_cursors_off (XWINDOW (f->root_window)); |
| 13434 | 10571 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10572 /* Clear out any recollection of where the mouse highlighting was, |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10573 since it might be in a place that's outside the new frame size. |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10574 Actually checking whether it is outside is a pain in the neck, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10575 so don't try--just let the highlighting be done afresh with new size. */ |
|
24827
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
10576 cancel_mouse_face (f); |
|
487fdbc8de0f
(cancel_mouse_face): new function. See equiv
Karl Heuer <kwzh@gnu.org>
parents:
24752
diff
changeset
|
10577 |
| 13434 | 10578 UNBLOCK_INPUT; |
| 10579 } | |
| 10580 | |
| 10581 /* Mouse warping. */ | |
| 10582 | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10583 void x_set_mouse_pixel_position (struct frame *f, int pix_x, int pix_y); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10584 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10585 void |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10586 x_set_mouse_position (f, x, y) |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10587 struct frame *f; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10588 int x, y; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10589 { |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10590 int pix_x, pix_y; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10591 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10592 pix_x = CHAR_TO_PIXEL_COL (f, x) + FONT_WIDTH (f->output_data.w32->font) / 2; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10593 pix_y = CHAR_TO_PIXEL_ROW (f, y) + f->output_data.w32->line_height / 2; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10594 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10595 if (pix_x < 0) pix_x = 0; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10596 if (pix_x > PIXEL_WIDTH (f)) pix_x = PIXEL_WIDTH (f); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10597 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10598 if (pix_y < 0) pix_y = 0; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10599 if (pix_y > PIXEL_HEIGHT (f)) pix_y = PIXEL_HEIGHT (f); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10600 |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10601 x_set_mouse_pixel_position (f, pix_x, pix_y); |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10602 } |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10603 |
| 13434 | 10604 void |
|
15616
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
10605 x_set_mouse_pixel_position (f, pix_x, pix_y) |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
10606 struct frame *f; |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
10607 int pix_x, pix_y; |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
10608 { |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10609 RECT rect; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10610 POINT pt; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10611 |
|
15616
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
10612 BLOCK_INPUT; |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
10613 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10614 GetClientRect (FRAME_W32_WINDOW (f), &rect); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10615 pt.x = rect.left + pix_x; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10616 pt.y = rect.top + pix_y; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10617 ClientToScreen (FRAME_W32_WINDOW (f), &pt); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10618 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10619 SetCursorPos (pt.x, pt.y); |
|
15616
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
10620 |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
10621 UNBLOCK_INPUT; |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
10622 } |
|
a73836346910
(x_set_mouse_pixel_position): Adjust coords by frame position.
Miles Bader <miles@gnu.org>
parents:
15435
diff
changeset
|
10623 |
| 13434 | 10624 |
| 10625 /* focus shifting, raising and lowering. */ | |
| 10626 | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10627 void |
| 13434 | 10628 x_focus_on_frame (f) |
| 10629 struct frame *f; | |
| 10630 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10631 struct w32_display_info *dpyinfo = &one_w32_display_info; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10632 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10633 /* Give input focus to frame. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10634 BLOCK_INPUT; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10635 #if 0 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10636 /* Try not to change its Z-order if possible. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10637 if (x_window_to_frame (dpyinfo, GetForegroundWindow ())) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10638 my_set_focus (f, FRAME_W32_WINDOW (f)); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10639 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10640 #endif |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
10641 my_set_foreground_window (FRAME_W32_WINDOW (f)); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10642 UNBLOCK_INPUT; |
| 13434 | 10643 } |
| 10644 | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10645 void |
| 13434 | 10646 x_unfocus_frame (f) |
| 10647 struct frame *f; | |
| 10648 { | |
| 10649 } | |
| 10650 | |
| 10651 /* Raise frame F. */ | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10652 void |
| 13434 | 10653 x_raise_frame (f) |
| 10654 struct frame *f; | |
| 10655 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10656 BLOCK_INPUT; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10657 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10658 /* Strictly speaking, raise-frame should only change the frame's Z |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10659 order, leaving input focus unchanged. This is reasonable behaviour |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10660 on X where the usual policy is point-to-focus. However, this |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10661 behaviour would be very odd on Windows where the usual policy is |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10662 click-to-focus. |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10663 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10664 On X, if the mouse happens to be over the raised frame, it gets |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10665 input focus anyway (so the window with focus will never be |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10666 completely obscured) - if not, then just moving the mouse over it |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10667 is sufficient to give it focus. On Windows, the user must actually |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10668 click on the frame (preferrably the title bar so as not to move |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10669 point), which is more awkward. Also, no other Windows program |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10670 raises a window to the top but leaves another window (possibly now |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10671 completely obscured) with input focus. |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10672 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10673 Because there is a system setting on Windows that allows the user |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10674 to choose the point to focus policy, we make the strict semantics |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10675 optional, but by default we grab focus when raising. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10676 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10677 if (NILP (Vw32_grab_focus_on_raise)) |
| 13434 | 10678 { |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10679 /* The obvious call to my_set_window_pos doesn't work if Emacs is |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10680 not already the foreground application: the frame is raised |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10681 above all other frames belonging to us, but not above the |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10682 current top window. To achieve that, we have to resort to this |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10683 more cumbersome method. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10684 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10685 HDWP handle = BeginDeferWindowPos (2); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10686 if (handle) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10687 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10688 DeferWindowPos (handle, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10689 FRAME_W32_WINDOW (f), |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10690 HWND_TOP, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10691 0, 0, 0, 0, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10692 SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10693 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10694 DeferWindowPos (handle, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10695 GetForegroundWindow (), |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10696 FRAME_W32_WINDOW (f), |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10697 0, 0, 0, 0, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10698 SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10699 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10700 EndDeferWindowPos (handle); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10701 } |
| 13434 | 10702 } |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10703 else |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10704 { |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
10705 my_set_foreground_window (FRAME_W32_WINDOW (f)); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10706 } |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10707 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10708 UNBLOCK_INPUT; |
| 13434 | 10709 } |
| 10710 | |
| 10711 /* Lower frame F. */ | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10712 void |
| 13434 | 10713 x_lower_frame (f) |
| 10714 struct frame *f; | |
| 10715 { | |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10716 BLOCK_INPUT; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10717 my_set_window_pos (FRAME_W32_WINDOW (f), |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10718 HWND_BOTTOM, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10719 0, 0, 0, 0, |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10720 SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10721 UNBLOCK_INPUT; |
| 13434 | 10722 } |
| 10723 | |
| 10724 static void | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10725 w32_frame_raise_lower (f, raise_flag) |
| 13434 | 10726 FRAME_PTR f; |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10727 int raise_flag; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10728 { |
| 35000 | 10729 if (! FRAME_W32_P (f)) |
| 10730 return; | |
| 10731 | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10732 if (raise_flag) |
| 13434 | 10733 x_raise_frame (f); |
| 10734 else | |
| 10735 x_lower_frame (f); | |
| 10736 } | |
| 10737 | |
| 10738 /* Change of visibility. */ | |
| 10739 | |
| 10740 /* This tries to wait until the frame is really visible. | |
| 10741 However, if the window manager asks the user where to position | |
| 10742 the frame, this will return before the user finishes doing that. | |
| 10743 The frame will not actually be visible at that time, | |
| 10744 but it will become visible later when the window manager | |
| 10745 finishes with it. */ | |
| 10746 | |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
10747 void |
| 13434 | 10748 x_make_frame_visible (f) |
| 10749 struct frame *f; | |
| 10750 { | |
|
25236
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10751 Lisp_Object type; |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10752 |
| 13434 | 10753 BLOCK_INPUT; |
| 10754 | |
|
25236
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10755 type = x_icon_type (f); |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10756 if (!NILP (type)) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10757 x_bitmap_icon (f, type); |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10758 |
| 13434 | 10759 if (! FRAME_VISIBLE_P (f)) |
| 10760 { | |
| 10761 /* We test FRAME_GARBAGED_P here to make sure we don't | |
| 10762 call x_set_offset a second time | |
| 10763 if we get to x_make_frame_visible a second time | |
| 10764 before the window gets really visible. */ | |
| 10765 if (! FRAME_ICONIFIED_P (f) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10766 && ! f->output_data.w32->asked_for_visible) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10767 x_set_offset (f, f->output_data.w32->left_pos, f->output_data.w32->top_pos, 0); |
| 13434 | 10768 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10769 f->output_data.w32->asked_for_visible = 1; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10770 |
|
42934
b3ee5e92548a
(x_scroll_run): Use ScrollWindowEx in place of BitBlt.
Jason Rumney <jasonr@gnu.org>
parents:
42919
diff
changeset
|
10771 /* my_show_window (f, FRAME_W32_WINDOW (f), f->async_iconified ? SW_RESTORE : SW_SHOW); */ |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10772 my_show_window (f, FRAME_W32_WINDOW (f), SW_SHOWNORMAL); |
| 13434 | 10773 } |
| 10774 | |
| 10775 /* Synchronize to ensure Emacs knows the frame is visible | |
| 10776 before we do anything else. We do this loop with input not blocked | |
| 10777 so that incoming events are handled. */ | |
| 10778 { | |
| 10779 Lisp_Object frame; | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10780 int count; |
| 13434 | 10781 |
| 10782 /* This must come after we set COUNT. */ | |
| 10783 UNBLOCK_INPUT; | |
| 10784 | |
| 10785 XSETFRAME (frame, f); | |
| 10786 | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10787 /* Wait until the frame is visible. Process X events until a |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10788 MapNotify event has been seen, or until we think we won't get a |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10789 MapNotify at all.. */ |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10790 for (count = input_signal_count + 10; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10791 input_signal_count < count && !FRAME_VISIBLE_P (f);) |
| 13434 | 10792 { |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10793 /* Force processing of queued events. */ |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
10794 /* TODO: x_sync equivalent? */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10795 |
| 13434 | 10796 /* Machines that do polling rather than SIGIO have been observed |
| 10797 to go into a busy-wait here. So we'll fake an alarm signal | |
| 10798 to let the handler know that there's something to be read. | |
| 10799 We used to raise a real alarm, but it seems that the handler | |
| 10800 isn't always enabled here. This is probably a bug. */ | |
| 10801 if (input_polling_used ()) | |
| 10802 { | |
| 10803 /* It could be confusing if a real alarm arrives while processing | |
| 10804 the fake one. Turn it off and let the handler reset it. */ | |
|
27631
5fe002cf4b37
(x_make_frame_visible): Replace call to
Andrew Innes <andrewi@gnu.org>
parents:
27514
diff
changeset
|
10805 int old_poll_suppress_count = poll_suppress_count; |
|
5fe002cf4b37
(x_make_frame_visible): Replace call to
Andrew Innes <andrewi@gnu.org>
parents:
27514
diff
changeset
|
10806 poll_suppress_count = 1; |
|
5fe002cf4b37
(x_make_frame_visible): Replace call to
Andrew Innes <andrewi@gnu.org>
parents:
27514
diff
changeset
|
10807 poll_for_input_1 (); |
|
5fe002cf4b37
(x_make_frame_visible): Replace call to
Andrew Innes <andrewi@gnu.org>
parents:
27514
diff
changeset
|
10808 poll_suppress_count = old_poll_suppress_count; |
| 13434 | 10809 } |
| 10810 } | |
| 10811 FRAME_SAMPLE_VISIBILITY (f); | |
| 10812 } | |
| 10813 } | |
| 10814 | |
| 10815 /* Change from mapped state to withdrawn state. */ | |
| 10816 | |
| 10817 /* Make the frame visible (mapped and not iconified). */ | |
| 10818 | |
| 10819 x_make_frame_invisible (f) | |
| 10820 struct frame *f; | |
| 10821 { | |
| 10822 /* Don't keep the highlight on an invisible frame. */ | |
|
47148
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
10823 if (FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame == f) |
|
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
10824 FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame = 0; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10825 |
| 13434 | 10826 BLOCK_INPUT; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10827 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10828 my_show_window (f, FRAME_W32_WINDOW (f), SW_HIDE); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10829 |
| 13434 | 10830 /* We can't distinguish this from iconification |
| 10831 just by the event that we get from the server. | |
| 10832 So we can't win using the usual strategy of letting | |
| 10833 FRAME_SAMPLE_VISIBILITY set this. So do it by hand, | |
| 10834 and synchronize with the server to make sure we agree. */ | |
| 10835 f->visible = 0; | |
| 10836 FRAME_ICONIFIED_P (f) = 0; | |
| 10837 f->async_visible = 0; | |
| 10838 f->async_iconified = 0; | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10839 |
| 13434 | 10840 UNBLOCK_INPUT; |
| 10841 } | |
| 10842 | |
| 10843 /* Change window state from mapped to iconified. */ | |
| 10844 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
10845 void |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
10846 x_iconify_frame (f) |
| 13434 | 10847 struct frame *f; |
| 10848 { | |
|
25236
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10849 Lisp_Object type; |
| 13434 | 10850 |
| 10851 /* Don't keep the highlight on an invisible frame. */ | |
|
47148
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
10852 if (FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame == f) |
|
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
10853 FRAME_W32_DISPLAY_INFO (f)->x_highlight_frame = 0; |
| 13434 | 10854 |
| 10855 if (f->async_iconified) | |
| 10856 return; | |
| 10857 | |
| 10858 BLOCK_INPUT; | |
| 10859 | |
|
25236
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10860 type = x_icon_type (f); |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10861 if (!NILP (type)) |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10862 x_bitmap_icon (f, type); |
|
ea748fe6dee4
(x_bitmap_icon): New function.
Geoff Voelker <voelker@cs.washington.edu>
parents:
24863
diff
changeset
|
10863 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10864 /* Simulate the user minimizing the frame. */ |
|
23951
ef1cba882819
(x_iconify_frame): Wait for frame to be iconified; do
Andrew Innes <andrewi@gnu.org>
parents:
23806
diff
changeset
|
10865 SendMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, SC_MINIMIZE, 0); |
| 13434 | 10866 |
| 10867 UNBLOCK_INPUT; | |
| 10868 } | |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10869 |
| 13434 | 10870 |
|
34545
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10871 /* Free X resources of frame F. */ |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10872 |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10873 void |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10874 x_free_frame_resources (f) |
| 13434 | 10875 struct frame *f; |
| 10876 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10877 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
| 13434 | 10878 |
| 10879 BLOCK_INPUT; | |
| 10880 | |
|
34545
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10881 if (FRAME_W32_WINDOW (f)) |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10882 my_destroy_window (f, FRAME_W32_WINDOW (f)); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10883 |
| 13434 | 10884 free_frame_menubar (f); |
|
34545
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10885 |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10886 unload_color (f, f->output_data.x->foreground_pixel); |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10887 unload_color (f, f->output_data.x->background_pixel); |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10888 unload_color (f, f->output_data.w32->cursor_pixel); |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10889 unload_color (f, f->output_data.w32->cursor_foreground_pixel); |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10890 unload_color (f, f->output_data.w32->border_pixel); |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10891 unload_color (f, f->output_data.w32->mouse_pixel); |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10892 if (f->output_data.w32->white_relief.allocated_p) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10893 unload_color (f, f->output_data.w32->white_relief.pixel); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10894 if (f->output_data.w32->black_relief.allocated_p) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10895 unload_color (f, f->output_data.w32->black_relief.pixel); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10896 |
|
34545
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10897 if (FRAME_FACE_CACHE (f)) |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10898 free_frame_faces (f); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10899 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10900 xfree (f->output_data.w32); |
|
34545
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10901 f->output_data.w32 = NULL; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
10902 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10903 if (f == dpyinfo->w32_focus_frame) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10904 dpyinfo->w32_focus_frame = 0; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10905 if (f == dpyinfo->w32_focus_event_frame) |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10906 dpyinfo->w32_focus_event_frame = 0; |
|
47148
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
10907 if (f == dpyinfo->x_highlight_frame) |
|
be0335657440
Changed all occurrences of w32_highlight_frame with x_highlight_frame.
Kim F. Storm <storm@cua.dk>
parents:
47143
diff
changeset
|
10908 dpyinfo->x_highlight_frame = 0; |
| 13434 | 10909 |
| 10910 if (f == dpyinfo->mouse_face_mouse_frame) | |
| 10911 { | |
| 10912 dpyinfo->mouse_face_beg_row | |
| 10913 = dpyinfo->mouse_face_beg_col = -1; | |
| 10914 dpyinfo->mouse_face_end_row | |
| 10915 = dpyinfo->mouse_face_end_col = -1; | |
| 10916 dpyinfo->mouse_face_window = Qnil; | |
|
34545
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10917 dpyinfo->mouse_face_deferred_gc = 0; |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10918 dpyinfo->mouse_face_mouse_frame = 0; |
| 13434 | 10919 } |
| 10920 | |
| 10921 UNBLOCK_INPUT; | |
| 10922 } | |
|
34545
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10923 |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10924 |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10925 /* Destroy the window of frame F. */ |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10926 |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10927 x_destroy_window (f) |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10928 struct frame *f; |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10929 { |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10930 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10931 |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10932 x_free_frame_resources (f); |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10933 |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10934 dpyinfo->reference_count--; |
|
0322014fcf27
(clear_mouse_face): Treat tip_frame as a Lisp_Object.
Andrew Innes <andrewi@gnu.org>
parents:
34229
diff
changeset
|
10935 } |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10936 |
| 13434 | 10937 |
| 10938 /* Setting window manager hints. */ | |
| 10939 | |
| 10940 /* Set the normal size hints for the window manager, for frame F. | |
| 10941 FLAGS is the flags word to use--or 0 meaning preserve the flags | |
| 10942 that the window now has. | |
| 10943 If USER_POSITION is nonzero, we set the USPosition | |
| 10944 flag (this is useful when FLAGS is 0). */ | |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
10945 void |
| 13434 | 10946 x_wm_set_size_hint (f, flags, user_position) |
| 10947 struct frame *f; | |
| 10948 long flags; | |
| 10949 int user_position; | |
| 10950 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10951 Window window = FRAME_W32_WINDOW (f); |
| 13434 | 10952 |
|
14351
fb2ce4ebc871
ubackout 1.3 and 1.4
Geoff Voelker <voelker@cs.washington.edu>
parents:
14248
diff
changeset
|
10953 enter_crit (); |
| 13434 | 10954 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10955 SetWindowLong (window, WND_FONTWIDTH_INDEX, FONT_WIDTH (f->output_data.w32->font)); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10956 SetWindowLong (window, WND_LINEHEIGHT_INDEX, f->output_data.w32->line_height); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10957 SetWindowLong (window, WND_BORDER_INDEX, f->output_data.w32->internal_border_width); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
10958 SetWindowLong (window, WND_SCROLLBAR_INDEX, f->output_data.w32->vertical_scroll_bar_extra); |
| 13434 | 10959 |
|
14351
fb2ce4ebc871
ubackout 1.3 and 1.4
Geoff Voelker <voelker@cs.washington.edu>
parents:
14248
diff
changeset
|
10960 leave_crit (); |
| 13434 | 10961 } |
| 10962 | |
| 10963 /* Window manager things */ | |
| 10964 x_wm_set_icon_position (f, icon_x, icon_y) | |
| 10965 struct frame *f; | |
| 10966 int icon_x, icon_y; | |
| 10967 { | |
| 10968 #if 0 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
10969 Window window = FRAME_W32_WINDOW (f); |
| 13434 | 10970 |
| 10971 f->display.x->wm_hints.flags |= IconPositionHint; | |
| 10972 f->display.x->wm_hints.icon_x = icon_x; | |
| 10973 f->display.x->wm_hints.icon_y = icon_y; | |
| 10974 | |
| 10975 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->display.x->wm_hints); | |
| 10976 #endif | |
| 10977 } | |
| 10978 | |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10979 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10980 /*********************************************************************** |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10981 Fonts |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10982 ***********************************************************************/ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10983 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10984 /* The following functions are listed here to help diff stay in step |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10985 with xterm.c. See w32fns.c for definitions. |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10986 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10987 x_get_font_info (f, font_idx) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10988 x_list_fonts (f, pattern, size, maxnames) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10989 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10990 */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10991 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10992 #if GLYPH_DEBUG |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10993 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10994 /* Check that FONT is valid on frame F. It is if it can be found in F's |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10995 font table. */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10996 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10997 static void |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10998 x_check_font (f, font) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
10999 struct frame *f; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11000 XFontStruct *font; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11001 { |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11002 int i; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11003 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11004 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11005 xassert (font != NULL); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11006 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11007 for (i = 0; i < dpyinfo->n_fonts; i++) |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11008 if (dpyinfo->font_table[i].name |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11009 && font == dpyinfo->font_table[i].font) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11010 break; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11011 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11012 xassert (i < dpyinfo->n_fonts); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11013 } |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11014 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11015 #endif /* GLYPH_DEBUG != 0 */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11016 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11017 /* Set *W to the minimum width, *H to the minimum font height of FONT. |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11018 Note: There are (broken) X fonts out there with invalid XFontStruct |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11019 min_bounds contents. For example, handa@etl.go.jp reports that |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11020 "-adobe-courier-medium-r-normal--*-180-*-*-m-*-iso8859-1" fonts |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11021 have font->min_bounds.width == 0. */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11022 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11023 static INLINE void |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11024 x_font_min_bounds (font, w, h) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11025 XFontStruct *font; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11026 int *w, *h; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11027 { |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11028 /* |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11029 * TODO: Windows does not appear to offer min bound, only |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11030 * average and maximum width, and maximum height. |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11031 */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11032 *h = FONT_HEIGHT (font); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11033 *w = FONT_WIDTH (font); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11034 } |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11035 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11036 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11037 /* Compute the smallest character width and smallest font height over |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11038 all fonts available on frame F. Set the members smallest_char_width |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11039 and smallest_font_height in F's x_display_info structure to |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11040 the values computed. Value is non-zero if smallest_font_height or |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11041 smallest_char_width become smaller than they were before. */ |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11042 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11043 int |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11044 x_compute_min_glyph_bounds (f) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11045 struct frame *f; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11046 { |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11047 int i; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11048 struct w32_display_info *dpyinfo = FRAME_W32_DISPLAY_INFO (f); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11049 XFontStruct *font; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11050 int old_width = dpyinfo->smallest_char_width; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11051 int old_height = dpyinfo->smallest_font_height; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11052 |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11053 dpyinfo->smallest_font_height = 100000; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11054 dpyinfo->smallest_char_width = 100000; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11055 |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11056 for (i = 0; i < dpyinfo->n_fonts; ++i) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11057 if (dpyinfo->font_table[i].name) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11058 { |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11059 struct font_info *fontp = dpyinfo->font_table + i; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11060 int w, h; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11061 |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11062 font = (XFontStruct *) fontp->font; |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11063 xassert (font != (XFontStruct *) ~0); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11064 x_font_min_bounds (font, &w, &h); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11065 |
|
35384
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11066 dpyinfo->smallest_font_height = min (dpyinfo->smallest_font_height, h); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11067 dpyinfo->smallest_char_width = min (dpyinfo->smallest_char_width, w); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11068 } |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11069 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11070 xassert (dpyinfo->smallest_char_width > 0 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11071 && dpyinfo->smallest_font_height > 0); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11072 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11073 return (dpyinfo->n_fonts == 1 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11074 || dpyinfo->smallest_char_width < old_width |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11075 || dpyinfo->smallest_font_height < old_height); |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11076 } |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11077 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11078 /* The following functions are listed here to help diff stay in step |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11079 with xterm.c. See w32fns.c for definitions. |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11080 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11081 x_load_font (f, fontname, size) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11082 x_query_font (f, fontname) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11083 x_find_ccl_program (fontp) |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11084 |
|
e50a7f9ce65e
(x_produce_stretch_glyph): Only use Qspace when GLYPH_DEBUG is defined.
Jason Rumney <jasonr@gnu.org>
parents:
35287
diff
changeset
|
11085 */ |
| 13434 | 11086 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11087 /*********************************************************************** |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11088 Initialization |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11089 ***********************************************************************/ |
| 13434 | 11090 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11091 static int w32_initialized = 0; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11092 |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11093 void |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11094 w32_initialize_display_info (display_name) |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11095 Lisp_Object display_name; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11096 { |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11097 struct w32_display_info *dpyinfo = &one_w32_display_info; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11098 |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11099 bzero (dpyinfo, sizeof (*dpyinfo)); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11100 |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11101 /* Put it on w32_display_name_list. */ |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11102 w32_display_name_list = Fcons (Fcons (display_name, Qnil), |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11103 w32_display_name_list); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11104 dpyinfo->name_list_element = XCAR (w32_display_name_list); |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11105 |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11106 dpyinfo->w32_id_name |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
11107 = (char *) xmalloc (SCHARS (Vinvocation_name) |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
11108 + SCHARS (Vsystem_name) |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11109 + 2); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11110 sprintf (dpyinfo->w32_id_name, "%s@%s", |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
45803
diff
changeset
|
11111 SDATA (Vinvocation_name), SDATA (Vsystem_name)); |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11112 |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11113 /* Default Console mode values - overridden when running in GUI mode |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11114 with values obtained from system metrics. */ |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11115 dpyinfo->resx = 1; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11116 dpyinfo->resy = 1; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11117 dpyinfo->height_in = 1; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11118 dpyinfo->width_in = 1; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11119 dpyinfo->n_planes = 1; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11120 dpyinfo->n_cbits = 4; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11121 dpyinfo->n_fonts = 0; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11122 dpyinfo->smallest_font_height = 1; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11123 dpyinfo->smallest_char_width = 1; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11124 |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11125 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11126 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11127 dpyinfo->mouse_face_face_id = DEFAULT_FACE_ID; |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11128 dpyinfo->mouse_face_window = Qnil; |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
11129 dpyinfo->mouse_face_overlay = Qnil; |
|
43373
44e2e2c9154f
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43146
diff
changeset
|
11130 dpyinfo->mouse_face_hidden = 0; |
|
49371
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
11131 |
|
c73ce11bb264
2003-01-21 KOBAYASHI Yasuhiro <kobayays@otsukakj.co.jp>
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
11132 dpyinfo->vertical_scroll_bar_cursor = w32_load_cursor (IDC_ARROW); |
|
33097
84590a646acc
(x_produce_glyphs): Handle composite characters.
Jason Rumney <jasonr@gnu.org>
parents:
33037
diff
changeset
|
11133 /* TODO: dpyinfo->gray */ |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11134 |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11135 } |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11136 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11137 struct w32_display_info * |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11138 w32_term_init (display_name, xrm_option, resource_name) |
| 13434 | 11139 Lisp_Object display_name; |
| 11140 char *xrm_option; | |
| 11141 char *resource_name; | |
| 11142 { | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11143 struct w32_display_info *dpyinfo; |
| 13434 | 11144 HDC hdc; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11145 |
| 13434 | 11146 BLOCK_INPUT; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11147 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11148 if (!w32_initialized) |
| 13434 | 11149 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11150 w32_initialize (); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11151 w32_initialized = 1; |
| 13434 | 11152 } |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11153 |
| 13434 | 11154 { |
| 11155 int argc = 0; | |
| 11156 char *argv[3]; | |
| 11157 | |
| 11158 argv[0] = ""; | |
| 11159 argc = 1; | |
| 11160 if (xrm_option) | |
| 11161 { | |
| 11162 argv[argc++] = "-xrm"; | |
| 11163 argv[argc++] = xrm_option; | |
| 11164 } | |
| 11165 } | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11166 |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11167 w32_initialize_display_info (display_name); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11168 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11169 dpyinfo = &one_w32_display_info; |
|
38570
9606b955465e
(x_display_list): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
36315
diff
changeset
|
11170 |
|
9606b955465e
(x_display_list): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
36315
diff
changeset
|
11171 /* Put this display on the chain. */ |
|
9606b955465e
(x_display_list): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
36315
diff
changeset
|
11172 dpyinfo->next = x_display_list; |
|
9606b955465e
(x_display_list): New variable.
Andrew Innes <andrewi@gnu.org>
parents:
36315
diff
changeset
|
11173 x_display_list = dpyinfo; |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11174 |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11175 hdc = GetDC (GetDesktopWindow ()); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11176 |
| 13434 | 11177 dpyinfo->height = GetDeviceCaps (hdc, VERTRES); |
| 11178 dpyinfo->width = GetDeviceCaps (hdc, HORZRES); | |
| 11179 dpyinfo->root_window = GetDesktopWindow (); | |
| 11180 dpyinfo->n_planes = GetDeviceCaps (hdc, PLANES); | |
| 11181 dpyinfo->n_cbits = GetDeviceCaps (hdc, BITSPIXEL); | |
|
27514
9625ad0c0f52
(w32_term_init): Swap resx and height_in, resy and
Jason Rumney <jasonr@gnu.org>
parents:
27406
diff
changeset
|
11182 dpyinfo->resx = GetDeviceCaps (hdc, LOGPIXELSX); |
|
9625ad0c0f52
(w32_term_init): Swap resx and height_in, resy and
Jason Rumney <jasonr@gnu.org>
parents:
27406
diff
changeset
|
11183 dpyinfo->resy = GetDeviceCaps (hdc, LOGPIXELSY); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11184 dpyinfo->has_palette = GetDeviceCaps (hdc, RASTERCAPS) & RC_PALETTE; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11185 dpyinfo->image_cache = make_image_cache (); |
|
27514
9625ad0c0f52
(w32_term_init): Swap resx and height_in, resy and
Jason Rumney <jasonr@gnu.org>
parents:
27406
diff
changeset
|
11186 dpyinfo->height_in = dpyinfo->height / dpyinfo->resx; |
|
9625ad0c0f52
(w32_term_init): Swap resx and height_in, resy and
Jason Rumney <jasonr@gnu.org>
parents:
27406
diff
changeset
|
11187 dpyinfo->width_in = dpyinfo->width / dpyinfo->resy; |
| 13434 | 11188 ReleaseDC (GetDesktopWindow (), hdc); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11189 |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11190 /* initialise palette with white and black */ |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11191 { |
|
47981
74b52651467d
(w32_term_init): Pass XColor to w32_define_color, not COLORREF.
Juanma Barranquero <lekktu@gmail.com>
parents:
47148
diff
changeset
|
11192 XColor color; |
|
27514
9625ad0c0f52
(w32_term_init): Swap resx and height_in, resy and
Jason Rumney <jasonr@gnu.org>
parents:
27406
diff
changeset
|
11193 w32_defined_color (0, "white", &color, 1); |
|
9625ad0c0f52
(w32_term_init): Swap resx and height_in, resy and
Jason Rumney <jasonr@gnu.org>
parents:
27406
diff
changeset
|
11194 w32_defined_color (0, "black", &color, 1); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11195 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11196 |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11197 /* Create Row Bitmaps and store them for later use. */ |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11198 left_bmp = CreateBitmap (left_width, left_height, 1, 1, left_bits); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11199 ov_bmp = CreateBitmap (ov_width, ov_height, 1, 1, ov_bits); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11200 right_bmp = CreateBitmap (right_width, right_height, 1, 1, right_bits); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11201 continued_bmp = CreateBitmap (continued_width, continued_height, 1, |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11202 1, continued_bits); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11203 continuation_bmp = CreateBitmap (continuation_width, continuation_height, |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11204 1, 1, continuation_bits); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11205 zv_bmp = CreateBitmap (zv_width, zv_height, 1, 1, zv_bits); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11206 |
| 13434 | 11207 #ifndef F_SETOWN_BUG |
| 11208 #ifdef F_SETOWN | |
| 11209 #ifdef F_SETOWN_SOCK_NEG | |
| 11210 /* stdin is a socket here */ | |
| 11211 fcntl (connection, F_SETOWN, -getpid ()); | |
| 11212 #else /* ! defined (F_SETOWN_SOCK_NEG) */ | |
| 11213 fcntl (connection, F_SETOWN, getpid ()); | |
| 11214 #endif /* ! defined (F_SETOWN_SOCK_NEG) */ | |
| 11215 #endif /* ! defined (F_SETOWN) */ | |
| 11216 #endif /* F_SETOWN_BUG */ | |
| 11217 | |
| 11218 #ifdef SIGIO | |
| 11219 if (interrupt_input) | |
| 11220 init_sigio (connection); | |
| 11221 #endif /* ! defined (SIGIO) */ | |
| 11222 | |
| 11223 UNBLOCK_INPUT; | |
| 11224 | |
| 11225 return dpyinfo; | |
| 11226 } | |
| 11227 | |
| 11228 /* Get rid of display DPYINFO, assuming all frames are already gone. */ | |
| 11229 | |
| 11230 void | |
| 11231 x_delete_display (dpyinfo) | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11232 struct w32_display_info *dpyinfo; |
| 13434 | 11233 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11234 /* Discard this display from w32_display_name_list and w32_display_list. |
| 13434 | 11235 We can't use Fdelq because that can quit. */ |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11236 if (! NILP (w32_display_name_list) |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25236
diff
changeset
|
11237 && EQ (XCAR (w32_display_name_list), dpyinfo->name_list_element)) |
|
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25236
diff
changeset
|
11238 w32_display_name_list = XCDR (w32_display_name_list); |
| 13434 | 11239 else |
| 11240 { | |
| 11241 Lisp_Object tail; | |
| 11242 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11243 tail = w32_display_name_list; |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25236
diff
changeset
|
11244 while (CONSP (tail) && CONSP (XCDR (tail))) |
| 13434 | 11245 { |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11246 if (EQ (XCAR (XCDR (tail)), dpyinfo->name_list_element)) |
| 13434 | 11247 { |
|
39973
579177964efa
Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents:
39697
diff
changeset
|
11248 XSETCDR (tail, XCDR (XCDR (tail))); |
| 13434 | 11249 break; |
| 11250 } | |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25236
diff
changeset
|
11251 tail = XCDR (tail); |
| 13434 | 11252 } |
| 11253 } | |
| 11254 | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11255 /* free palette table */ |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11256 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11257 struct w32_palette_entry * plist; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11258 |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11259 plist = dpyinfo->color_list; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11260 while (plist) |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11261 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11262 struct w32_palette_entry * pentry = plist; |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11263 plist = plist->next; |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
11264 xfree (pentry); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11265 } |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11266 dpyinfo->color_list = NULL; |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11267 if (dpyinfo->palette) |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11268 DeleteObject(dpyinfo->palette); |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11269 } |
| 13434 | 11270 xfree (dpyinfo->font_table); |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11271 xfree (dpyinfo->w32_id_name); |
|
27889
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11272 |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11273 /* Destroy row bitmaps. */ |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11274 DeleteObject (left_bmp); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11275 DeleteObject (ov_bmp); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11276 DeleteObject (right_bmp); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11277 DeleteObject (continued_bmp); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11278 DeleteObject (continuation_bmp); |
|
51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
Jason Rumney <jasonr@gnu.org>
parents:
27631
diff
changeset
|
11279 DeleteObject (zv_bmp); |
| 13434 | 11280 } |
| 11281 | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11282 /* Set up use of W32. */ |
| 13434 | 11283 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11284 DWORD w32_msg_worker (); |
| 13434 | 11285 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11286 void |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11287 x_flush (struct frame * f) |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11288 { /* Nothing to do */ } |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11289 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11290 static struct redisplay_interface w32_redisplay_interface = |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11291 { |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11292 x_produce_glyphs, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11293 x_write_glyphs, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11294 x_insert_glyphs, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11295 x_clear_end_of_line, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11296 x_scroll_run, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11297 x_after_update_window_line, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11298 x_update_window_begin, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11299 x_update_window_end, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11300 w32_cursor_to, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11301 x_flush, |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
11302 x_clear_mouse_face, |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11303 x_get_glyph_overhangs, |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11304 x_fix_overlapping_area |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11305 }; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11306 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11307 void |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11308 w32_initialize () |
| 13434 | 11309 { |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11310 rif = &w32_redisplay_interface; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11311 |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
11312 /* MSVC does not type K&R functions with no arguments correctly, and |
|
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
11313 so we must explicitly cast them. */ |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11314 clear_frame_hook = (void (*)(void)) x_clear_frame; |
|
21831
6b659713b90b
Forward declare hooks with full function prototypes.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21740
diff
changeset
|
11315 ring_bell_hook = (void (*)(void)) w32_ring_bell; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11316 update_begin_hook = x_update_begin; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11317 update_end_hook = x_update_end; |
|
35449
98d65e364070
(w32_ring_bell): Only support visible bell on w32
Andrew Innes <andrewi@gnu.org>
parents:
35384
diff
changeset
|
11318 |
| 13434 | 11319 read_socket_hook = w32_read_socket; |
|
35449
98d65e364070
(w32_ring_bell): Only support visible bell on w32
Andrew Innes <andrewi@gnu.org>
parents:
35384
diff
changeset
|
11320 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11321 frame_up_to_date_hook = w32_frame_up_to_date; |
|
35449
98d65e364070
(w32_ring_bell): Only support visible bell on w32
Andrew Innes <andrewi@gnu.org>
parents:
35384
diff
changeset
|
11322 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11323 mouse_position_hook = w32_mouse_position; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11324 frame_rehighlight_hook = w32_frame_rehighlight; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11325 frame_raise_lower_hook = w32_frame_raise_lower; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11326 set_vertical_scroll_bar_hook = w32_set_vertical_scroll_bar; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11327 condemn_scroll_bars_hook = w32_condemn_scroll_bars; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11328 redeem_scroll_bar_hook = w32_redeem_scroll_bar; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11329 judge_scroll_bars_hook = w32_judge_scroll_bars; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11330 estimate_mode_line_height_hook = x_estimate_mode_line_height; |
| 13434 | 11331 |
| 11332 scroll_region_ok = 1; /* we'll scroll partial frames */ | |
|
36002
205727d5d63c
(w32_encode_char): Treat eight bit graphic and control
Jason Rumney <jasonr@gnu.org>
parents:
35984
diff
changeset
|
11333 char_ins_del_ok = 1; |
| 13434 | 11334 line_ins_del_ok = 1; /* we'll just blt 'em */ |
| 11335 fast_clear_end_of_line = 1; /* X does this well */ | |
| 11336 memory_below_frame = 0; /* we don't remember what scrolls | |
| 11337 off the bottom */ | |
| 11338 baud_rate = 19200; | |
| 11339 | |
|
40384
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
11340 w32_system_caret_hwnd = NULL; |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
11341 w32_system_caret_height = 0; |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
11342 w32_system_caret_x = 0; |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
11343 w32_system_caret_y = 0; |
|
25e6d4bb5f7f
(w32_system_caret_hwnd, w32_system_caret_width)
Jason Rumney <jasonr@gnu.org>
parents:
40245
diff
changeset
|
11344 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11345 last_tool_bar_item = -1; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11346 any_help_event_p = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11347 |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11348 /* Initialize input mode: interrupt_input off, no flow control, allow |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11349 8 bit character input, standard quit char. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11350 Fset_input_mode (Qnil, Qnil, make_number (2), Qnil); |
| 13434 | 11351 |
| 11352 /* Create the window thread - it will terminate itself or when the app terminates */ | |
| 11353 | |
| 11354 init_crit (); | |
| 11355 | |
| 11356 dwMainThreadId = GetCurrentThreadId (); | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11357 DuplicateHandle (GetCurrentProcess (), GetCurrentThread (), |
| 13434 | 11358 GetCurrentProcess (), &hMainThread, 0, TRUE, DUPLICATE_SAME_ACCESS); |
| 11359 | |
| 11360 /* Wait for thread to start */ | |
| 11361 | |
| 11362 { | |
| 11363 MSG msg; | |
| 11364 | |
| 11365 PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE); | |
| 11366 | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11367 hWindowsThread = CreateThread (NULL, 0, |
|
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11368 (LPTHREAD_START_ROUTINE) w32_msg_worker, |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
11369 0, 0, &dwWindowsThreadId); |
| 13434 | 11370 |
| 11371 GetMessage (&msg, NULL, WM_EMACS_DONE, WM_EMACS_DONE); | |
| 11372 } | |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11373 |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11374 /* It is desirable that mainThread should have the same notion of |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
11375 focus window and active window as windowsThread. Unfortunately, the |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11376 following call to AttachThreadInput, which should do precisely what |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11377 we need, causes major problems when Emacs is linked as a console |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11378 program. Unfortunately, we have good reasons for doing that, so |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
11379 instead we need to send messages to windowsThread to make some API |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11380 calls for us (ones that affect, or depend on, the active/focus |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11381 window state. */ |
|
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11382 #ifdef ATTACH_THREADS |
|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16588
diff
changeset
|
11383 AttachThreadInput (dwMainThreadId, dwWindowsThreadId, TRUE); |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11384 #endif |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11385 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11386 /* Dynamically link to optional system components. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11387 { |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11388 HANDLE user_lib = LoadLibrary ("user32.dll"); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11389 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11390 #define LOAD_PROC(fn) pfn##fn = (void *) GetProcAddress (user_lib, #fn) |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11391 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11392 /* New proportional scroll bar functions. */ |
|
32022
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
11393 LOAD_PROC (SetScrollInfo); |
|
1f26caa05cd7
(w32_char_font_type, w32_encode_char, x_produce_glyphs): Distinguish
Jason Rumney <jasonr@gnu.org>
parents:
31624
diff
changeset
|
11394 LOAD_PROC (GetScrollInfo); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11395 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11396 #undef LOAD_PROC |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11397 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11398 FreeLibrary (user_lib); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11399 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11400 /* If using proportional scroll bars, ensure handle is at least 5 pixels; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11401 otherwise use the fixed height. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11402 vertical_scroll_bar_min_handle = (pfnSetScrollInfo != NULL) ? 5 : |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11403 GetSystemMetrics (SM_CYVTHUMB); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11404 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11405 /* For either kind of scroll bar, take account of the arrows; these |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11406 effectively form the border of the main scroll bar range. */ |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11407 vertical_scroll_bar_top_border = vertical_scroll_bar_bottom_border |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11408 = GetSystemMetrics (SM_CYVSCROLL); |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11409 } |
| 13434 | 11410 } |
| 11411 | |
| 11412 void | |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11413 syms_of_w32term () |
| 13434 | 11414 { |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11415 staticpro (&w32_display_name_list); |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11416 w32_display_name_list = Qnil; |
| 13434 | 11417 |
| 11418 staticpro (&last_mouse_scroll_bar); | |
| 11419 last_mouse_scroll_bar = Qnil; | |
| 11420 | |
| 11421 staticpro (&Qvendor_specific_keysyms); | |
| 11422 Qvendor_specific_keysyms = intern ("vendor-specific-keysyms"); | |
|
15151
ed6ddfc0d954
(Vwindow_system): Declared.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15035
diff
changeset
|
11423 |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11424 DEFVAR_INT ("w32-num-mouse-buttons", |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11425 &Vw32_num_mouse_buttons, |
|
40962
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11426 doc: /* Number of physical mouse buttons. */); |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11427 Vw32_num_mouse_buttons = Qnil; |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11428 |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11429 DEFVAR_LISP ("w32-swap-mouse-buttons", |
|
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11430 &Vw32_swap_mouse_buttons, |
|
40962
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11431 doc: /* Swap the mapping of middle and right mouse buttons. |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11432 When nil, middle button is mouse-2 and right button is mouse-3. */); |
|
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16326
diff
changeset
|
11433 Vw32_swap_mouse_buttons = Qnil; |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11434 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11435 DEFVAR_LISP ("w32-grab-focus-on-raise", |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11436 &Vw32_grab_focus_on_raise, |
|
40962
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11437 doc: /* Raised frame grabs input focus. |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11438 When t, `raise-frame' grabs input focus as well. This fits well |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11439 with the normal Windows click-to-focus policy, but might not be |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11440 desirable when using a point-to-focus policy. */); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11441 Vw32_grab_focus_on_raise = Qt; |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11442 |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11443 DEFVAR_LISP ("w32-capslock-is-shiftlock", |
|
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11444 &Vw32_capslock_is_shiftlock, |
|
40962
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11445 doc: /* Apply CapsLock state to non character input keys. |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11446 When nil, CapsLock only affects normal character input keys. */); |
|
19713
043ccce224fb
(SIF_*): Win95 macros defined for NT.
Geoff Voelker <voelker@cs.washington.edu>
parents:
18877
diff
changeset
|
11447 Vw32_capslock_is_shiftlock = Qnil; |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
11448 |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
11449 DEFVAR_LISP ("w32-recognize-altgr", |
|
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
11450 &Vw32_recognize_altgr, |
|
40962
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11451 doc: /* Recognize right-alt and left-ctrl as AltGr. |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11452 When nil, the right-alt and left-ctrl key combination is |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11453 interpreted normally. */); |
|
21614
2624d8dcc73f
(Vw32_recognize_altgr): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21456
diff
changeset
|
11454 Vw32_recognize_altgr = Qt; |
|
23638
e6fb9ffee4f4
(dumpglyphs): Use FRAME_FONT for w32_fill_area.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23510
diff
changeset
|
11455 |
|
23639
516fc58a7b7b
(w32_enable_unicode_output): Rename from
Geoff Voelker <voelker@cs.washington.edu>
parents:
23638
diff
changeset
|
11456 DEFVAR_BOOL ("w32-enable-unicode-output", |
|
516fc58a7b7b
(w32_enable_unicode_output): Rename from
Geoff Voelker <voelker@cs.washington.edu>
parents:
23638
diff
changeset
|
11457 &w32_enable_unicode_output, |
|
40962
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11458 doc: /* Enable the use of Unicode for text output if non-nil. |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11459 Unicode output may prevent some third party applications for displaying |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11460 Far-East Languages on Windows 95/98 from working properly. |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11461 NT uses Unicode internally anyway, so this flag will probably have no |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11462 affect on NT machines. */); |
|
23639
516fc58a7b7b
(w32_enable_unicode_output): Rename from
Geoff Voelker <voelker@cs.washington.edu>
parents:
23638
diff
changeset
|
11463 w32_enable_unicode_output = 1; |
|
24131
34f6ec762e5e
Remove codepage macros. Remove redundant BIG5 macros.
Geoff Voelker <voelker@cs.washington.edu>
parents:
23951
diff
changeset
|
11464 |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
11465 help_echo = Qnil; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11466 staticpro (&help_echo); |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
11467 help_echo_object = Qnil; |
|
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
11468 staticpro (&help_echo_object); |
|
30988
a69a2ac4345b
(help_echo_window): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
30730
diff
changeset
|
11469 help_echo_window = Qnil; |
|
a69a2ac4345b
(help_echo_window): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
30730
diff
changeset
|
11470 staticpro (&help_echo_window); |
|
30240
2c2a7ebd2c15
(help_echo_object, help_echo_pos): New variables.
Jason Rumney <jasonr@gnu.org>
parents:
30199
diff
changeset
|
11471 previous_help_echo = Qnil; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11472 staticpro (&previous_help_echo); |
|
30988
a69a2ac4345b
(help_echo_window): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
30730
diff
changeset
|
11473 help_echo_pos = -1; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11474 |
|
44359
ff9f7aee02c8
Rename autoselect_window_p to mouse_autoselect_window.
Pavel Jan?k <Pavel@Janik.cz>
parents:
44302
diff
changeset
|
11475 DEFVAR_BOOL ("mouse-autoselect-window", &mouse_autoselect_window, |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
11476 doc: /* *Non-nil means autoselect window with mouse pointer. */); |
|
44359
ff9f7aee02c8
Rename autoselect_window_p to mouse_autoselect_window.
Pavel Jan?k <Pavel@Janik.cz>
parents:
44302
diff
changeset
|
11477 mouse_autoselect_window = 0; |
|
43396
9b50c09298f6
* w32term.c (x_autoselect_window_p): New variable.
Jason Rumney <jasonr@gnu.org>
parents:
43373
diff
changeset
|
11478 |
|
42864
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11479 DEFVAR_BOOL ("w32-use-visible-system-caret", |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11480 &w32_use_visible_system_caret, |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11481 doc: /* Flag to make the system caret visible. |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11482 When this is non-nil, Emacs will indicate the position of point by |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11483 using the system caret instead of drawing its own cursor. Some screen |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11484 reader software does not track the system cursor properly when it is |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11485 invisible, and gets confused by Emacs drawing its own cursor, so this |
|
48218
01e253345507
(w32_draw_fringe_bitmap): Remove unused local variable window.
Juanma Barranquero <lekktu@gmail.com>
parents:
48025
diff
changeset
|
11486 variable is initialized to t when Emacs detects that screen reader |
|
42864
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11487 software is running as it starts up. |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11488 |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11489 When this variable is set, other variables affecting the appearance of |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11490 the cursor have no effect. */); |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11491 |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11492 /* Initialize w32_use_visible_system_caret based on whether a screen |
|
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11493 reader is in use. */ |
|
42919
2a546583564f
(x_update_window_begin): Only hide caret if
Jason Rumney <jasonr@gnu.org>
parents:
42864
diff
changeset
|
11494 if (!SystemParametersInfo (SPI_GETSCREENREADER, 0, |
|
2a546583564f
(x_update_window_begin): Only hide caret if
Jason Rumney <jasonr@gnu.org>
parents:
42864
diff
changeset
|
11495 &w32_use_visible_system_caret, 0)) |
|
2a546583564f
(x_update_window_begin): Only hide caret if
Jason Rumney <jasonr@gnu.org>
parents:
42864
diff
changeset
|
11496 w32_use_visible_system_caret = 0; |
|
42864
c1af6a7f3dd4
(w32_system_caret_width): Remove.
Jason Rumney <jasonr@gnu.org>
parents:
42844
diff
changeset
|
11497 |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11498 DEFVAR_BOOL ("x-stretch-cursor", &x_stretch_cursor_p, |
|
40962
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11499 doc: /* *Non-nil means draw block cursor as wide as the glyph under it. |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11500 For example, if a block cursor is over a tab, it will be drawn as |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11501 wide as that tab on the display. */); |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11502 x_stretch_cursor_p = 0; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11503 |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
11504 DEFVAR_BOOL ("x-use-underline-position-properties", |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
11505 &x_use_underline_position_properties, |
|
40962
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11506 doc: /* *Non-nil means make use of UNDERLINE_POSITION font properties. |
| 42206 | 11507 nil means ignore them. If you encounter fonts with bogus |
|
40962
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11508 UNDERLINE_POSITION font properties, for example 7x13 on XFree prior |
|
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11509 to 4.1, set this to nil. */); |
|
40137
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
11510 x_use_underline_position_properties = 1; |
|
5f0d7d58283b
(remember_mouse_glyph): New function.
Jason Rumney <jasonr@gnu.org>
parents:
40078
diff
changeset
|
11511 |
|
34869
1d671133e618
(syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents:
34823
diff
changeset
|
11512 DEFVAR_LISP ("x-toolkit-scroll-bars", &Vx_toolkit_scroll_bars, |
|
40962
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40816
diff
changeset
|
11513 doc: /* If not nil, Emacs uses toolkit scroll bars. */); |
|
34869
1d671133e618
(syms_of_xterm): DEFVAR_LISP x-toolkit-scroll-bars
Gerd Moellmann <gerd@gnu.org>
parents:
34823
diff
changeset
|
11514 Vx_toolkit_scroll_bars = Qt; |
|
27402
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11515 |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11516 staticpro (&last_mouse_motion_frame); |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11517 last_mouse_motion_frame = Qnil; |
|
044fe520ab6e
Complete rewrite based on xterm.c.
Jason Rumney <jasonr@gnu.org>
parents:
26088
diff
changeset
|
11518 } |
