/* Implementation of GUI terminal on the Microsoft Windows API.
-Copyright (C) 1989, 1993-2013 Free Software Foundation, Inc.
+Copyright (C) 1989, 1993-2014 Free Software Foundation, Inc.
This file is part of GNU Emacs.
w32_draw_window_divider (struct window *w, int x0, int x1, int y0, int y1)
{
struct frame *f = XFRAME (WINDOW_FRAME (w));
- RECT r;
- HDC hdc;
- struct face *face;
-
- r.left = x0;
- r.right = x1;
- r.top = y0;
- r.bottom = y1;
-
- hdc = get_frame_dc (f);
- face = FACE_FROM_ID (f, WINDOW_DIVIDER_FACE_ID);
- if (face)
- w32_fill_rect (f, hdc, face->foreground, &r);
+ HDC hdc = get_frame_dc (f);
+ struct face *face = FACE_FROM_ID (f, WINDOW_DIVIDER_FACE_ID);
+ struct face *face_first = FACE_FROM_ID (f, WINDOW_DIVIDER_FIRST_PIXEL_FACE_ID);
+ struct face *face_last = FACE_FROM_ID (f, WINDOW_DIVIDER_LAST_PIXEL_FACE_ID);
+ unsigned long color = face ? face->foreground : FRAME_FOREGROUND_PIXEL (f);
+ unsigned long color_first = (face_first
+ ? face_first->foreground
+ : FRAME_FOREGROUND_PIXEL (f));
+ unsigned long color_last = (face_last
+ ? face_last->foreground
+ : FRAME_FOREGROUND_PIXEL (f));
+
+ if (y1 - y0 > x1 - x0 && x1 - x0 > 2)
+ /* Vertical. */
+ {
+ w32_fill_area_abs (f, hdc, color_first, x0, y0, x0 + 1, y1);
+ w32_fill_area_abs (f, hdc, color, x0 + 1, y0, x1 - 1, y1);
+ w32_fill_area_abs (f, hdc, color_last, x1 - 1, y0, x1, y1);
+ }
+ else if (x1 - x0 > y1 - y0 && y1 - y0 > 3)
+ /* Horizontal. */
+ {
+ w32_fill_area_abs (f, hdc, color_first, x0, y0, x1, y0 + 1);
+ w32_fill_area_abs (f, hdc, color, x0, y0 + 1, x1, y1 - 1);
+ w32_fill_area_abs (f, hdc, color_last, x0, y1 - 1, x1, y1);
+ }
else
- w32_fill_rect (f, hdc, FRAME_FOREGROUND_PIXEL (f), &r);
+ w32_fill_area_abs (f, hdc, color, x0, y0, x1, y1);
release_frame_dc (f, hdc);
}
-
/* End update of window W.
Draw vertical borders between horizontally adjacent windows, and
/* Compute the left edge and the width of the scroll bar area. */
left = WINDOW_SCROLL_BAR_AREA_X (w);
- width = WINDOW_CONFIG_SCROLL_BAR_WIDTH (w);
+ width = WINDOW_SCROLL_BAR_AREA_WIDTH (w);
/* Does the scroll bar exist yet? */
if (NILP (w->vertical_scroll_bar))
if (f)
{
dpyinfo->n_cbits = msg.msg.wParam;
+ /* The new display could have a different resolution, in
+ which case we must reconsider what fullscreen
+ means. */
+ x_check_fullscreen (f);
DebPrint (("display change: %d %d\n",
(short) LOWORD (msg.msg.lParam),
(short) HIWORD (msg.msg.lParam)));
x_new_font (struct frame *f, Lisp_Object font_object, int fontset)
{
struct font *font = XFONT_OBJECT (font_object);
+ int unit;
if (fontset < 0)
fontset = fontset_from_font (font_object);
FRAME_FONT (f) = font;
FRAME_BASELINE_OFFSET (f) = font->baseline_offset;
- FRAME_COLUMN_WIDTH (f) = font->average_width;
+ FRAME_COLUMN_WIDTH (f) = unit = font->average_width;
FRAME_LINE_HEIGHT (f) = font->height;
compute_fringe_widths (f, 1);
- /* Compute the scroll bar width in character columns. */
+ /* Compute number of scrollbar columns. */
+ unit = FRAME_COLUMN_WIDTH (f);
if (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) > 0)
- {
- int wid = FRAME_COLUMN_WIDTH (f);
- FRAME_CONFIG_SCROLL_BAR_COLS (f)
- = (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) + wid - 1) / wid;
- }
+ FRAME_CONFIG_SCROLL_BAR_COLS (f)
+ = (FRAME_CONFIG_SCROLL_BAR_WIDTH (f) + unit - 1) / unit;
else
{
- int wid = FRAME_COLUMN_WIDTH (f);
- FRAME_CONFIG_SCROLL_BAR_COLS (f) = (14 + wid - 1) / wid;
+ FRAME_CONFIG_SCROLL_BAR_COLS (f) = (14 + unit - 1) / unit;
+ FRAME_CONFIG_SCROLL_BAR_WIDTH (f) =
+ FRAME_CONFIG_SCROLL_BAR_COLS (f) * unit;
}
/* Now make the frame display the given font. */
if (FRAME_PREV_FSMODE (f) == FULLSCREEN_BOTH)
{
SetWindowLong (hwnd, GWL_STYLE, dwStyle | WS_OVERLAPPEDWINDOW);
- SetWindowPos (hwnd, NULL, 0, 0, 0, 0,
- SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
- SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
- }
+ SetWindowPlacement (hwnd, &FRAME_NORMAL_PLACEMENT (f));
+ }
+ else if (FRAME_PREV_FSMODE (f) == FULLSCREEN_HEIGHT
+ || FRAME_PREV_FSMODE (f) == FULLSCREEN_WIDTH)
+ SetWindowPlacement (hwnd, &FRAME_NORMAL_PLACEMENT (f));
- w32_fullscreen_rect (hwnd, f->want_fullscreen,
- FRAME_NORMAL_PLACEMENT (f).rcNormalPosition, &rect);
FRAME_PREV_FSMODE (f) = f->want_fullscreen;
- if (f->want_fullscreen == FULLSCREEN_MAXIMIZED)
- PostMessage (FRAME_W32_WINDOW (f), WM_SYSCOMMAND, 0xf030, 0);
+
+ if (f->want_fullscreen == FULLSCREEN_NONE)
+ ShowWindow (hwnd, SW_SHOWNORMAL);
+ else if (f->want_fullscreen == FULLSCREEN_MAXIMIZED)
+ ShowWindow (hwnd, SW_MAXIMIZE);
else if (f->want_fullscreen == FULLSCREEN_BOTH)
{
+ w32_fullscreen_rect (hwnd, f->want_fullscreen,
+ FRAME_NORMAL_PLACEMENT (f).rcNormalPosition, &rect);
SetWindowLong (hwnd, GWL_STYLE, dwStyle & ~WS_OVERLAPPEDWINDOW);
SetWindowPos (hwnd, HWND_TOP, rect.left, rect.top,
rect.right - rect.left, rect.bottom - rect.top,
}
else
{
+ ShowWindow (hwnd, SW_SHOWNORMAL);
+ w32_fullscreen_rect (hwnd, f->want_fullscreen,
+ FRAME_NORMAL_PLACEMENT (f).rcNormalPosition, &rect);
SetWindowPos (hwnd, HWND_TOP, rect.left, rect.top,
rect.right - rect.left, rect.bottom - rect.top, 0);
}
Fset_input_mode (Qnil, Qnil, make_number (2), Qnil);
{
- DWORD input_locale_id = ((DWORD_PTR) GetKeyboardLayout (0) & 0xffffffff);
- w32_keyboard_codepage =
- codepage_for_locale ((LCID) (input_locale_id & 0xffff));
+ LCID input_locale_id = LOWORD (GetKeyboardLayout (0));
+ w32_keyboard_codepage = codepage_for_locale (input_locale_id);
}
/* Create the window thread - it will terminate itself when the app