Mercurial > emacs
changeset 27889:51d0b4b8fc6a
(w32_display_info_for_display): Remove unused function.
(w32_draw_bitmap): Use pre-built bitmaps.
(w32_initialize_display_info): New function to initialize parts of
display info that are common to both GUI and console frames.
(w32_term_init): Use w32_initialize_display_info. Do not set
Vw32_num_mouse_buttons here, as it is not called for console
frames. Build bitmaps for indicating truncated lines etc.
(x_delete_display): Destroy pre-built bitmaps.
author | Jason Rumney <jasonr@gnu.org> |
---|---|
date | Sun, 27 Feb 2000 21:26:58 +0000 |
parents | 3e1c17057b79 |
children | 91be3fa84ccb |
files | src/w32term.c |
diffstat | 1 files changed, 77 insertions(+), 70 deletions(-) [+] |
line wrap: on
line diff
--- a/src/w32term.c Sun Feb 27 21:13:00 2000 +0000 +++ b/src/w32term.c Sun Feb 27 21:26:58 2000 +0000 @@ -34,6 +34,7 @@ #include "systty.h" #include "systime.h" +#include "atimer.h" #include <ctype.h> #include <errno.h> @@ -89,6 +90,7 @@ #define zv_height 8 static unsigned short zv_bits[] = { 0x00, 0x00, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00}; +static HBITMAP zv_bmp; /* An arrow like this: `<-'. */ @@ -96,6 +98,7 @@ #define left_height 8 static unsigned short left_bits[] = { 0x18, 0x30, 0x60, 0xfc, 0xfc, 0x60, 0x30, 0x18}; +static HBITMAP left_bmp; /* Right truncation arrow bitmap `->'. */ @@ -103,6 +106,7 @@ #define right_height 8 static unsigned short right_bits[] = { 0x18, 0x0c, 0x06, 0x3f, 0x3f, 0x06, 0x0c, 0x18}; +static HBITMAP right_bmp; /* Marker for continued lines. */ @@ -110,6 +114,7 @@ #define continued_height 8 static unsigned short continued_bits[] = { 0x3c, 0x3e, 0x03, 0x27, 0x3f, 0x3e, 0x3c, 0x3e}; +static HBITMAP continued_bmp; /* Marker for continuation lines. */ @@ -117,6 +122,7 @@ #define continuation_height 8 static unsigned short continuation_bits[] = { 0x3c, 0x7c, 0xc0, 0xe4, 0xfc, 0x7c, 0x3c, 0x7c}; +static HBITMAP continuation_bmp; /* Overlay arrow bitmap. */ @@ -132,8 +138,8 @@ #define ov_height 8 static unsigned short ov_bits[] = { 0xc0, 0xf0, 0xf8, 0xfc, 0xfc, 0xf8, 0xf0, 0xc0}; - #endif +static HBITMAP ov_bmp; extern Lisp_Object Qhelp_echo; @@ -165,6 +171,7 @@ #define CP_DEFAULT 1004 extern unsigned int msh_mousewheel; +extern int inhibit_busy_cursor; extern void free_frame_menubar (); @@ -464,14 +471,6 @@ SelectClipRgn (hdc, NULL); } -/* Return the struct w32_display_info. */ - -struct w32_display_info * -w32_display_info_for_display () -{ - return (&one_w32_display_info); -} - /* Draw a hollow rectangle at the specified position. */ void @@ -747,7 +746,6 @@ Window window = FRAME_W32_WINDOW (f); HDC compat_hdc; int x, y, wd, h, dy; - unsigned short *bits; HBITMAP pixmap; HBRUSH fg_brush, orig_brush; HANDLE horig_obj; @@ -761,7 +759,7 @@ case LEFT_TRUNCATION_BITMAP: wd = left_width; h = left_height; - bits = left_bits; + pixmap = left_bmp; x = (WINDOW_TO_FRAME_PIXEL_X (w, 0) - wd - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2); @@ -770,7 +768,7 @@ case OVERLAY_ARROW_BITMAP: wd = ov_width; h = ov_height; - bits = ov_bits; + pixmap = ov_bmp; x = (WINDOW_TO_FRAME_PIXEL_X (w, 0) - wd - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2); @@ -779,7 +777,7 @@ case RIGHT_TRUNCATION_BITMAP: wd = right_width; h = right_height; - bits = right_bits; + pixmap = right_bmp; x = window_box_right (w, -1); x += (FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f) - wd) / 2; break; @@ -787,7 +785,7 @@ case CONTINUED_LINE_BITMAP: wd = continued_width; h = continued_height; - bits = continued_bits; + pixmap = continued_bmp; x = window_box_right (w, -1); x += (FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f) - wd) / 2; break; @@ -795,7 +793,7 @@ case CONTINUATION_LINE_BITMAP: wd = continuation_width; h = continuation_height; - bits = continuation_bits; + pixmap = continuation_bmp; x = (WINDOW_TO_FRAME_PIXEL_X (w, 0) - wd - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2); @@ -804,7 +802,7 @@ case ZV_LINE_BITMAP: wd = zv_width; h = zv_height; - bits = zv_bits; + pixmap = zv_bmp; x = (WINDOW_TO_FRAME_PIXEL_X (w, 0) - wd - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2); @@ -819,10 +817,8 @@ y = WINDOW_TO_FRAME_PIXEL_Y (w, row->y); dy = (row->height - h) / 2; - /* Draw the bitmap. I believe these small pixmaps can be cached - by the server. */ + /* Draw the bitmap. */ face = FACE_FROM_ID (f, BITMAP_AREA_FACE_ID); - pixmap = CreateBitmap (wd, h, 1, 1, bits); compat_hdc = CreateCompatibleDC (hdc); SaveDC (hdc); @@ -838,7 +834,6 @@ #endif SelectObject (compat_hdc, horig_obj); SelectObject (hdc, orig_brush); - DeleteObject (pixmap); DeleteObject (fg_brush); DeleteDC (compat_hdc); RestoreDC (hdc, -1); @@ -9548,6 +9543,47 @@ static int w32_initialized = 0; +void +w32_initialize_display_info (display_name) + Lisp_Object display_name; +{ + struct w32_display_info *dpyinfo = &one_w32_display_info; + + bzero (dpyinfo, sizeof (*dpyinfo)); + + /* Put it on w32_display_name_list. */ + w32_display_name_list = Fcons (Fcons (display_name, Qnil), + w32_display_name_list); + dpyinfo->name_list_element = XCAR (w32_display_name_list); + + dpyinfo->w32_id_name + = (char *) xmalloc (XSTRING (Vinvocation_name)->size + + XSTRING (Vsystem_name)->size + + 2); + sprintf (dpyinfo->w32_id_name, "%s@%s", + XSTRING (Vinvocation_name)->data, XSTRING (Vsystem_name)->data); + + /* Default Console mode values - overridden when running in GUI mode + with values obtained from system metrics. */ + dpyinfo->resx = 1; + dpyinfo->resy = 1; + dpyinfo->height_in = 1; + dpyinfo->width_in = 1; + dpyinfo->n_planes = 1; + dpyinfo->n_cbits = 4; + dpyinfo->n_fonts = 0; + dpyinfo->smallest_font_height = 1; + dpyinfo->smallest_char_width = 1; + + dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; + dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; + dpyinfo->mouse_face_face_id = DEFAULT_FACE_ID; + dpyinfo->mouse_face_window = Qnil; + + /* NTEMACS_TODO: dpyinfo->gray */ + +} + struct w32_display_info * w32_term_init (display_name, xrm_option, resource_name) Lisp_Object display_name; @@ -9578,31 +9614,10 @@ } } + w32_initialize_display_info (display_name); + dpyinfo = &one_w32_display_info; - /* Put this display on the chain. */ - dpyinfo->next = NULL; - - /* Put it on w32_display_name_list as well, to keep them parallel. */ - w32_display_name_list = Fcons (Fcons (display_name, Qnil), - w32_display_name_list); - dpyinfo->name_list_element = XCAR (w32_display_name_list); - - dpyinfo->w32_id_name - = (char *) xmalloc (XSTRING (Vinvocation_name)->size - + XSTRING (Vsystem_name)->size - + 2); - sprintf (dpyinfo->w32_id_name, "%s@%s", - XSTRING (Vinvocation_name)->data, XSTRING (Vsystem_name)->data); - -#if 0 - xrdb = x_load_resources (dpyinfo->display, xrm_option, - resource_name, EMACS_CLASS); - - /* Put the rdb where we can find it in a way that works on - all versions. */ - dpyinfo->xrdb = xrdb; -#endif hdc = GetDC (GetDesktopWindow ()); dpyinfo->height = GetDeviceCaps (hdc, VERTRES); @@ -9613,35 +9628,10 @@ dpyinfo->resx = GetDeviceCaps (hdc, LOGPIXELSX); dpyinfo->resy = GetDeviceCaps (hdc, LOGPIXELSY); dpyinfo->has_palette = GetDeviceCaps (hdc, RASTERCAPS) & RC_PALETTE; - dpyinfo->grabbed = 0; - dpyinfo->reference_count = 0; - dpyinfo->font_table = NULL; - dpyinfo->n_fonts = 0; - dpyinfo->font_table_size = 0; - dpyinfo->bitmaps = 0; - dpyinfo->bitmaps_size = 0; - dpyinfo->bitmaps_last = 0; - dpyinfo->scratch_cursor_gc = NULL; - dpyinfo->mouse_face_mouse_frame = 0; - dpyinfo->mouse_face_deferred_gc = 0; - dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; - dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; - dpyinfo->mouse_face_face_id = DEFAULT_FACE_ID; - dpyinfo->mouse_face_window = Qnil; - dpyinfo->mouse_face_mouse_x = dpyinfo->mouse_face_mouse_y = 0; - dpyinfo->mouse_face_defer = 0; - dpyinfo->w32_focus_frame = 0; - dpyinfo->w32_focus_event_frame = 0; - dpyinfo->w32_highlight_frame = 0; dpyinfo->image_cache = make_image_cache (); dpyinfo->height_in = dpyinfo->height / dpyinfo->resx; dpyinfo->width_in = dpyinfo->width / dpyinfo->resy; ReleaseDC (GetDesktopWindow (), hdc); - /* NTEMACS_TODO: dpyinfo->gray */ - /* Determine if there is a middle mouse button, to allow parse_button - to decide whether right mouse events should be mouse-2 or - mouse-3. */ - XSETINT (Vw32_num_mouse_buttons, GetSystemMetrics (SM_CMOUSEBUTTONS)); /* initialise palette with white and black */ { @@ -9650,6 +9640,16 @@ w32_defined_color (0, "black", &color, 1); } + /* Create Row Bitmaps and store them for later use. */ + left_bmp = CreateBitmap (left_width, left_height, 1, 1, left_bits); + ov_bmp = CreateBitmap (ov_width, ov_height, 1, 1, ov_bits); + right_bmp = CreateBitmap (right_width, right_height, 1, 1, right_bits); + continued_bmp = CreateBitmap (continued_width, continued_height, 1, + 1, continued_bits); + continuation_bmp = CreateBitmap (continuation_width, continuation_height, + 1, 1, continuation_bits); + zv_bmp = CreateBitmap (zv_width, zv_height, 1, 1, zv_bits); + #ifndef F_SETOWN_BUG #ifdef F_SETOWN #ifdef F_SETOWN_SOCK_NEG @@ -9689,8 +9689,7 @@ tail = w32_display_name_list; while (CONSP (tail) && CONSP (XCDR (tail))) { - if (EQ (XCAR (XCDR (tail)), - dpyinfo->name_list_element)) + if (EQ (XCAR (XCDR (tail)), dpyinfo->name_list_element)) { XCDR (tail) = XCDR (XCDR (tail)); break; @@ -9716,6 +9715,14 @@ } xfree (dpyinfo->font_table); xfree (dpyinfo->w32_id_name); + + /* Destroy row bitmaps. */ + DeleteObject (left_bmp); + DeleteObject (ov_bmp); + DeleteObject (right_bmp); + DeleteObject (continued_bmp); + DeleteObject (continuation_bmp); + DeleteObject (zv_bmp); } /* Set up use of W32. */