comparison src/redisplay-msw.c @ 251:677f6a0ee643 r20-5b24

Import from CVS: tag r20-5b24
author cvs
date Mon, 13 Aug 2007 10:19:59 +0200
parents 83b3d10dcba9
children 157b30c96d03
comparison
equal deleted inserted replaced
250:f385a461c9aa 251:677f6a0ee643
44 #include "redisplay.h" 44 #include "redisplay.h"
45 #include "sysdep.h" 45 #include "sysdep.h"
46 #include "window.h" 46 #include "window.h"
47 47
48 #include "windows.h" 48 #include "windows.h"
49 #ifdef MULE
50 #include "mule-ccl.h"
51 #include "mule-charset.h"
52 #endif
49 53
50 /* MSWINDOWS_DIVIDER_LINE_WIDTH is the width of the line drawn in the gutter. 54 /* MSWINDOWS_DIVIDER_LINE_WIDTH is the width of the line drawn in the gutter.
51 MSWINDOWS_DIVIDER_SPACING is the amount of blank space on each side of the line. 55 MSWINDOWS_DIVIDER_SPACING is the amount of blank space on each side of the line.
52 MSWINDOWS_DIVIDER_WIDTH = MSWINDOWS_DIVIDER_LINE_WIDTH + 2*MSWINDOWS_DIVIDER_SPACING 56 MSWINDOWS_DIVIDER_WIDTH = MSWINDOWS_DIVIDER_LINE_WIDTH + 2*MSWINDOWS_DIVIDER_SPACING
53 */ 57 */
58 #define MSWINDOWS_EOL_CURSOR_WIDTH 5 62 #define MSWINDOWS_EOL_CURSOR_WIDTH 5
59 63
60 /* 64 /*
61 * Random forward delarations 65 * Random forward delarations
62 */ 66 */
67 static void mswindows_update_dc (HDC hdc, Lisp_Object font, Lisp_Object fg,
68 Lisp_Object bg, Lisp_Object bg_pmap);
63 static void mswindows_clear_region (Lisp_Object locale, face_index findex, 69 static void mswindows_clear_region (Lisp_Object locale, face_index findex,
64 int x, int y, int width, int height); 70 int x, int y, int width, int height);
65 static void mswindows_output_vertical_divider (struct window *w, int clear); 71 static void mswindows_output_vertical_divider (struct window *w, int clear);
66 static void mswindows_redraw_exposed_windows (Lisp_Object window, int x, 72 static void mswindows_redraw_exposed_windows (Lisp_Object window, int x,
67 int y, int width, int height); 73 int y, int width, int height);
179 } 185 }
180 186
181 187
182 static int 188 static int
183 mswindows_text_width_single_run (HDC hdc, struct face_cachel *cachel, 189 mswindows_text_width_single_run (HDC hdc, struct face_cachel *cachel,
184 textual_run *run) 190 textual_run *run)
185 { 191 {
186 Lisp_Object font_inst = FACE_CACHEL_FONT (cachel, run->charset); 192 Lisp_Object font_inst = FACE_CACHEL_FONT (cachel, run->charset);
187 struct Lisp_Font_Instance *fi = XFONT_INSTANCE (font_inst); 193 struct Lisp_Font_Instance *fi = XFONT_INSTANCE (font_inst);
188 SIZE size; 194 SIZE size;
189 195
190 #if 0 /* XXX HACK: mswindows_text_width is broken and will pass in a NULL hdc */
191 if (!fi->proportional_p)
192 #else
193 if (!fi->proportional_p || !hdc) 196 if (!fi->proportional_p || !hdc)
194 #endif
195 return (fi->width * run->len); 197 return (fi->width * run->len);
196 else 198 else
197 { 199 {
198 assert(run->dimension == 1); /* XXX FIXME! */ 200 assert(run->dimension == 1); /* #### FIXME! */
199 GetTextExtentPoint32(hdc, run->ptr, run->len, &size); 201 mswindows_update_dc (hdc, font_inst, Qnil, Qnil, Qnil);
202 GetTextExtentPoint32 (hdc, run->ptr, run->len, &size);
200 return(size.cx); 203 return(size.cx);
201 } 204 }
202 } 205 }
203 206
204 207
205 /***************************************************************************** 208 /*****************************************************************************
206 mswindows_update_gc 209 mswindows_update_dc
207 210
208 Given a number of parameters munge the GC so it has those properties. 211 Given a number of parameters munge the DC so it has those properties.
209 ****************************************************************************/ 212 ****************************************************************************/
210 static void 213 static void
211 mswindows_update_gc (HDC hdc, Lisp_Object font, Lisp_Object fg, Lisp_Object bg, 214 mswindows_update_dc (HDC hdc, Lisp_Object font, Lisp_Object fg,
212 Lisp_Object bg_pmap, Lisp_Object lwidth) 215 Lisp_Object bg, Lisp_Object bg_pmap)
213 { 216 {
214 if (!NILP (font)) 217 if (!NILP (font))
215 SelectObject(hdc, (XFONT_INSTANCE (font))->data); 218 SelectObject(hdc, FONT_INSTANCE_MSWINDOWS_HFONT (XFONT_INSTANCE (font)));
216 219
217 /* evil kludge! - XXX do we need this? */ 220 #ifdef DEBUG_XEMACS
221 /* evil kludge! - #### do we need this? */
218 if (!NILP (fg) && !COLOR_INSTANCEP (fg)) 222 if (!NILP (fg) && !COLOR_INSTANCEP (fg))
219 { 223 {
220 fprintf (stderr, "Help! mswindows_update_gc got a bogus fg value! fg = "); 224 /* this break under mule */
221 debug_print (fg); 225 #if 0
226 fprintf (stderr, "Help! mswindows_update_dc got a bogus fg value! fg = ");
227 debug_print (fg);
228 #endif
222 fg = Qnil; 229 fg = Qnil;
223 } 230 }
224 231
225 if (!NILP (bg) && !COLOR_INSTANCEP (bg)) 232 if (!NILP (bg) && !COLOR_INSTANCEP (bg))
226 { 233 {
227 fprintf (stderr, "Help! mswindows_update_gc got a bogus fg value! bg = "); 234 /* this break under mule */
228 debug_print (bg); 235 #if 0
236 fprintf (stderr, "Help! mswindows_update_dc got a bogus fg value! bg = ");
237 debug_print (bg);
238 #endif
229 bg = Qnil; 239 bg = Qnil;
230 } 240 }
241 #endif
231 242
232 if (!NILP (fg)) 243 if (!NILP (fg))
233 SetTextColor (hdc, COLOR_INSTANCE_MSWINDOWS_COLOR (XCOLOR_INSTANCE (fg))); 244 SetTextColor (hdc, COLOR_INSTANCE_MSWINDOWS_COLOR (XCOLOR_INSTANCE (fg)));
234 245
235 if (!NILP (bg)) 246 if (!NILP (bg))
252 gcv.tile = XIMAGE_INSTANCE_X_PIXMAP (bg_pmap); 263 gcv.tile = XIMAGE_INSTANCE_X_PIXMAP (bg_pmap);
253 mask |= (GCTile | GCFillStyle); 264 mask |= (GCTile | GCFillStyle);
254 } 265 }
255 } 266 }
256 #endif 267 #endif
257
258 #if 0 /* XXX FIXME */
259 if (!NILP (lwidth))
260 {
261 gcv.line_width = XINT (lwidth);
262 mask |= GCLineWidth;
263 }
264 #endif
265 } 268 }
266 269
267 270
268 /***************************************************************************** 271 /*****************************************************************************
269 mswindows_output_hline 272 mswindows_output_hline
295 if (!IMAGE_INSTANCEP (bg_pmap) 298 if (!IMAGE_INSTANCEP (bg_pmap)
296 || !IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (bg_pmap))) 299 || !IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (bg_pmap)))
297 bg_pmap = Qnil; 300 bg_pmap = Qnil;
298 301
299 /* #### This deals only with solid colors */ 302 /* #### This deals only with solid colors */
300 mswindows_update_gc (FRAME_MSWINDOWS_DC (f), Qnil, Qnil, 303 mswindows_update_dc (FRAME_MSWINDOWS_DC (f), Qnil, Qnil,
301 cachel->background, Qnil, Qnil); 304 cachel->background, Qnil);
302 ExtTextOut (FRAME_MSWINDOWS_DC (f), 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL); 305 ExtTextOut (FRAME_MSWINDOWS_DC (f), 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL);
303 } 306 }
304 307
305 308
306 /***************************************************************************** 309 /*****************************************************************************
350 Output nothing at eol if bar cursor */ 353 Output nothing at eol if bar cursor */
351 cachel = WINDOW_FACE_CACHEL (w, 354 cachel = WINDOW_FACE_CACHEL (w,
352 (bar_p 355 (bar_p
353 ? rb->findex 356 ? rb->findex
354 : get_builtin_face_cache_index (w, Vtext_cursor_face))); 357 : get_builtin_face_cache_index (w, Vtext_cursor_face)));
355 mswindows_update_gc (hdc, font, cachel->foreground, 358 mswindows_update_dc (hdc, font, cachel->foreground,
356 cachel->background, Qnil, Qnil); 359 cachel->background, Qnil);
357 ExtTextOut (FRAME_MSWINDOWS_DC (f), xpos, dl->ypos, ETO_OPAQUE, 360 ExtTextOut (hdc, xpos, dl->ypos, ETO_OPAQUE|ETO_CLIPPED, &rect, p_char, n_char, NULL);
358 &rect, p_char, n_char, NULL);
359 361
360 if (focus && bar_p) 362 if (focus && bar_p)
361 { 363 {
362 rect.right = rect.left + (EQ (bar, Qt) ? 1 : 2); 364 rect.right = rect.left + (EQ (bar, Qt) ? 1 : 2);
363 cachel = WINDOW_FACE_CACHEL (w, 365 cachel = WINDOW_FACE_CACHEL (w,
364 get_builtin_face_cache_index (w, Vtext_cursor_face)); 366 get_builtin_face_cache_index (w, Vtext_cursor_face));
365 mswindows_update_gc (hdc, Qnil, Qnil, 367 mswindows_update_dc (hdc, Qnil, Qnil, cachel->background, Qnil);
366 cachel->background, Qnil, Qnil); 368 ExtTextOut (hdc, xpos, dl->ypos, ETO_OPAQUE, &rect, NULL, 0, NULL);
367 ExtTextOut (FRAME_MSWINDOWS_DC (f), xpos, dl->ypos, ETO_OPAQUE,
368 &rect, NULL, 0, NULL);
369 } 369 }
370 else if (!focus) 370 else if (!focus)
371 { 371 {
372 /* Now have real character drawn in its own color. We defalte 372 /* Now have real character drawn in its own color. We defalte
373 the rectangle so character cell will be bounded by the 373 the rectangle so character cell will be bounded by the
380 n_char = 1; 380 n_char = 1;
381 } 381 }
382 382
383 cachel = WINDOW_FACE_CACHEL (w, (real_char_p ? rb->findex 383 cachel = WINDOW_FACE_CACHEL (w, (real_char_p ? rb->findex
384 : get_builtin_face_cache_index (w, Vdefault_face))); 384 : get_builtin_face_cache_index (w, Vdefault_face)));
385 mswindows_update_gc (hdc, Qnil, cachel->foreground, 385 mswindows_update_dc (hdc, Qnil, cachel->foreground,
386 cachel->background, Qnil, Qnil); 386 cachel->background, Qnil);
387 ExtTextOut (FRAME_MSWINDOWS_DC (f), xpos, dl->ypos, ETO_OPAQUE | ETO_CLIPPED, 387 ExtTextOut (hdc, xpos, dl->ypos, ETO_OPAQUE | ETO_CLIPPED,
388 &rect, p_char, n_char, NULL); 388 &rect, p_char, n_char, NULL);
389 } 389 }
390 } 390 }
391 391
392 392
420 int width, face_index findex) 420 int width, face_index findex)
421 { 421 {
422 struct frame *f = XFRAME (w->frame); 422 struct frame *f = XFRAME (w->frame);
423 /* struct device *d = XDEVICE (f->device);*/ 423 /* struct device *d = XDEVICE (f->device);*/
424 Lisp_Object window = Qnil; 424 Lisp_Object window = Qnil;
425 HDC hdc; 425 HDC hdc = FRAME_MSWINDOWS_DC (f);
426 int clip_end; 426 int clip_end;
427 Lisp_Object bg_pmap; 427 Lisp_Object bg_pmap;
428 int len = Dynarr_length (buf); 428 int len = Dynarr_length (buf);
429 unsigned char *text_storage = (unsigned char *) alloca (2 * len); 429 unsigned char *text_storage = (unsigned char *) alloca (2 * len);
430 textual_run *runs = alloca_array (textual_run, len); 430 textual_run *runs = alloca_array (textual_run, len);
431 int nruns; 431 int nruns;
432 int i; 432 int i;
433 struct face_cachel *cachel = WINDOW_FACE_CACHEL (w, findex); 433 struct face_cachel *cachel = WINDOW_FACE_CACHEL (w, findex);
434 434
435 XSETWINDOW (window, w); 435 XSETWINDOW (window, w);
436 hdc = FRAME_MSWINDOWS_DC(f);
437 436
438 #if 0 /* XXX: FIXME? */ 437 #if 0 /* XXX: FIXME? */
439 /* We can't work out the width before we've set the font in the DC */ 438 /* We can't work out the width before we've set the font in the DC */
440 if (width < 0) 439 if (width < 0)
441 width = mswindows_text_width (cachel, Dynarr_atp (buf, 0), Dynarr_length (buf)); 440 width = mswindows_text_width (cachel, Dynarr_atp (buf, 0), Dynarr_length (buf));
470 clip_end, dl->ypos + dl->descent - dl->clip }; 469 clip_end, dl->ypos + dl->descent - dl->clip };
471 470
472 if (EQ (font, Vthe_null_font_instance)) 471 if (EQ (font, Vthe_null_font_instance))
473 continue; 472 continue;
474 473
475 mswindows_update_gc (hdc, font, cachel->foreground, 474 mswindows_update_dc (hdc, font, cachel->foreground,
476 NILP(bg_pmap) ? cachel->background : Qnil, 475 NILP(bg_pmap) ? cachel->background : Qnil, Qnil);
477 Qnil, Qnil);
478 476
479 this_width = mswindows_text_width_single_run (hdc, cachel, runs + i); 477 this_width = mswindows_text_width_single_run (hdc, cachel, runs + i);
480 478
481 /* #### bg_pmap should be output here */ 479 /* #### bg_pmap should be output here */
482 480
500 * 498 *
501 * Function checks whether deadbox intersects with the rectangle pointed 499 * Function checks whether deadbox intersects with the rectangle pointed
502 * to by PRC, and paints only the intersection 500 * to by PRC, and paints only the intersection
503 */ 501 */
504 static void 502 static void
505 mswindows_redisplay_deadbox_maybe (struct window *w, 503 mswindows_redisplay_deadbox_maybe (struct window *w, CONST RECT* prc)
506 CONST RECT* prc)
507 { 504 {
508 int sbh = window_scrollbar_height (w); 505 int sbh = window_scrollbar_height (w);
509 int sbw = window_scrollbar_width (w); 506 int sbw = window_scrollbar_width (w);
510 RECT rect_dead, rect_paint; 507 RECT rect_dead, rect_paint;
511 struct frame *f; 508 struct frame *f;
680 WINDOW_MODELINE_RIGHT (w), 677 WINDOW_MODELINE_RIGHT (w),
681 dl->ypos + dl->descent + shadow_width}; 678 dl->ypos + dl->descent + shadow_width};
682 UINT edge; 679 UINT edge;
683 680
684 color = WINDOW_FACE_CACHEL_BACKGROUND (w, MODELINE_INDEX); 681 color = WINDOW_FACE_CACHEL_BACKGROUND (w, MODELINE_INDEX);
685 mswindows_update_gc(FRAME_MSWINDOWS_DC(f), Qnil, Qnil, color, Qnil, Qnil); 682 mswindows_update_dc (FRAME_MSWINDOWS_DC (f), Qnil, Qnil, color, Qnil);
686 683
687 if (XINT (w->modeline_shadow_thickness) < 0) 684 if (XINT (w->modeline_shadow_thickness) < 0)
688 shadow_width = -shadow_width; 685 shadow_width = -shadow_width;
689 686
690 if (shadow_width < -1) 687 if (shadow_width < -1)
694 else if (shadow_width == 1) 691 else if (shadow_width == 1)
695 edge = BDR_RAISEDINNER; 692 edge = BDR_RAISEDINNER;
696 else 693 else
697 edge = EDGE_RAISED; 694 edge = EDGE_RAISED;
698 695
699 DrawEdge (FRAME_MSWINDOWS_DC(f), &rect, edge, BF_RECT); 696 DrawEdge (FRAME_MSWINDOWS_DC (f), &rect, edge, BF_RECT);
700 } 697 }
701 698
702 699
703 /***************************************************************************** 700 /*****************************************************************************
704 #### Display methods 701 #### Display methods
863 mswindows_output_cursor (w, dl, xpos, cursor_width, rb); 860 mswindows_output_cursor (w, dl, xpos, cursor_width, rb);
864 } 861 }
865 else 862 else
866 { 863 {
867 Dynarr_add (buf, rb->object.chr.ch); 864 Dynarr_add (buf, rb->object.chr.ch);
868 #if 0
869 mswindows_output_string (w, dl, buf, xpos, 0, start_pixpos,
870 rb->width, findex, 1,
871 cursor_start, cursor_width,
872 cursor_height);
873 #else
874 mswindows_output_cursor (w, dl, xpos, cursor_width, rb); 865 mswindows_output_cursor (w, dl, xpos, cursor_width, rb);
875 #endif
876 Dynarr_reset (buf); 866 Dynarr_reset (buf);
877 } 867 }
878 868
879 xpos += rb->width; 869 xpos += rb->width;
880 elt++; 870 elt++;
939 convert_bufbyte_string_into_emchar_dynarr 929 convert_bufbyte_string_into_emchar_dynarr
940 (XSTRING_DATA (string), XSTRING_LENGTH (string), buf); 930 (XSTRING_DATA (string), XSTRING_LENGTH (string), buf);
941 931
942 if (rb->cursor_type == CURSOR_ON) 932 if (rb->cursor_type == CURSOR_ON)
943 mswindows_output_cursor (w, dl, xpos, cursor_width, rb); 933 mswindows_output_cursor (w, dl, xpos, cursor_width, rb);
944 else 934 else /* #### redisplay-x passes -1 as the width: why ? */
945 mswindows_output_string (w, dl, buf, xpos, 935 mswindows_output_string (w, dl, buf, xpos,
946 rb->object.dglyph.xoffset, 936 rb->object.dglyph.xoffset,
947 start_pixpos, -1, findex); 937 start_pixpos, rb->width, findex);
948 Dynarr_reset (buf); 938 Dynarr_reset (buf);
949 } 939 }
950 break; 940 break;
951 941
952 case IMAGE_MONO_PIXMAP: 942 case IMAGE_MONO_PIXMAP:
1036 rect.top = WINDOW_TEXT_TOP (w); 1026 rect.top = WINDOW_TEXT_TOP (w);
1037 rect.bottom = WINDOW_BOTTOM (w) - modeline_height; 1027 rect.bottom = WINDOW_BOTTOM (w) - modeline_height;
1038 1028
1039 /* Draw the divider line */ 1029 /* Draw the divider line */
1040 color = WINDOW_FACE_CACHEL_BACKGROUND (w, MODELINE_INDEX); 1030 color = WINDOW_FACE_CACHEL_BACKGROUND (w, MODELINE_INDEX);
1041 mswindows_update_gc(FRAME_MSWINDOWS_DC(f), Qnil, Qnil, color, Qnil, Qnil); 1031 mswindows_update_dc (FRAME_MSWINDOWS_DC(f), Qnil, Qnil, color, Qnil);
1042 ExtTextOut (FRAME_MSWINDOWS_DC(f), 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL); 1032 ExtTextOut (FRAME_MSWINDOWS_DC (f), 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL);
1043 if (shadow_width) 1033 if (shadow_width)
1044 DrawEdge (FRAME_MSWINDOWS_DC(f), &rect, 1034 DrawEdge (FRAME_MSWINDOWS_DC (f), &rect,
1045 shadow_width==1 ? BDR_RAISEDINNER : EDGE_RAISED, 1035 shadow_width==1 ? BDR_RAISEDINNER : EDGE_RAISED,
1046 BF_TOP|BF_RIGHT|BF_LEFT); 1036 BF_TOP|BF_RIGHT|BF_LEFT);
1047 } 1037 }
1048 1038
1049 1039
1050 /**************************************************************************** 1040 /****************************************************************************
1051 mswindows_text_width 1041 mswindows_text_width
1052 1042
1053 Given a string and a face, return the string's length in pixels when 1043 Given a string and a face, return the string's length in pixels when
1054 displayed in the font associated with the face. 1044 displayed in the font associated with the face.
1055 XXX FIXME: get redisplay_text_width_emchar_string() etc to pass in the
1056 window so we can get hold of the window's frame's gc
1057 ****************************************************************************/ 1045 ****************************************************************************/
1058 static int 1046 static int
1059 mswindows_text_width (struct face_cachel *cachel, CONST Emchar *str, 1047 mswindows_text_width (struct frame *f, struct face_cachel *cachel,
1060 Charcount len) 1048 CONST Emchar *str, Charcount len)
1061 { 1049 {
1062 int width_so_far = 0; 1050 int width_so_far = 0;
1063 unsigned char *text_storage = (unsigned char *) alloca (2 * len); 1051 unsigned char *text_storage = (unsigned char *) alloca (2 * len);
1064 textual_run *runs = alloca_array (textual_run, len); 1052 textual_run *runs = alloca_array (textual_run, len);
1065 int nruns; 1053 int nruns;
1066 int i; 1054 int i;
1067 HDC hdc=NULL; /* XXXXX FIXME! only works for non-proportional fonts! */
1068 1055
1069 nruns = separate_textual_runs (text_storage, runs, str, len); 1056 nruns = separate_textual_runs (text_storage, runs, str, len);
1070 1057
1071 for (i = 0; i < nruns; i++) 1058 for (i = 0; i < nruns; i++)
1072 width_so_far += mswindows_text_width_single_run (hdc, cachel, runs + i); 1059 width_so_far += mswindows_text_width_single_run (FRAME_MSWINDOWS_DC (f),
1060 cachel, runs + i);
1073 1061
1074 return width_so_far; 1062 return width_so_far;
1075 } 1063 }
1076 1064
1077 1065
1146 { 1134 {
1147 fcolor = FACE_FOREGROUND (Vdefault_face, locale); 1135 fcolor = FACE_FOREGROUND (Vdefault_face, locale);
1148 bcolor = FACE_BACKGROUND (Vdefault_face, locale); 1136 bcolor = FACE_BACKGROUND (Vdefault_face, locale);
1149 } 1137 }
1150 1138
1151 mswindows_update_gc (FRAME_MSWINDOWS_DC(f), Qnil, fcolor, bcolor, background_pixmap, Qnil); 1139 mswindows_update_dc (FRAME_MSWINDOWS_DC (f),
1140 Qnil, fcolor, bcolor, background_pixmap);
1152 } 1141 }
1153 1142
1154 /* XX FIXME: Get brush from background_pixmap here */ 1143 /* XX FIXME: Get brush from background_pixmap here */
1155 assert(0); 1144 assert(0);
1156 FillRect (FRAME_MSWINDOWS_DC(f), &rect, brush); 1145 FillRect (FRAME_MSWINDOWS_DC(f), &rect, brush);
1157 } 1146 }
1158 else 1147 else
1159 { 1148 {
1160 Lisp_Object color = (w ? WINDOW_FACE_CACHEL_BACKGROUND (w, findex) : 1149 Lisp_Object color = (w ? WINDOW_FACE_CACHEL_BACKGROUND (w, findex) :
1161 FACE_BACKGROUND (Vdefault_face, locale)); 1150 FACE_BACKGROUND (Vdefault_face, locale));
1162 mswindows_update_gc(FRAME_MSWINDOWS_DC(f), Qnil, Qnil, color, Qnil, Qnil); 1151 mswindows_update_dc (FRAME_MSWINDOWS_DC (f), Qnil, Qnil, color, Qnil);
1163 ExtTextOut (FRAME_MSWINDOWS_DC(f), 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL); 1152 ExtTextOut (FRAME_MSWINDOWS_DC (f), 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL);
1164 } 1153 }
1165 1154
1166 #ifdef HAVE_SCROLLBARS 1155 #ifdef HAVE_SCROLLBARS
1167 if (WINDOWP (locale)) 1156 if (WINDOWP (locale))
1168 mswindows_redisplay_deadbox_maybe (w, &rect); 1157 mswindows_redisplay_deadbox_maybe (w, &rect);