Mercurial > emacs
changeset 71236:4a38eb2f741d
(w32_set_scroll_bar_thumb, x_scroll_bar_create)
(w32_set_vertical_scroll_bar, w32_scroll_bar_handle_click)
(x_scroll_bar_report_motion): Remove workarounds for
versions of Windows NT < 3.51.
[!SIF_ALL]: Remove.
(pfnSetScrollInfo, pfnGetScrollInfo): Remove.
(w32_initialize): Don't dynamically load Get/SetScrollInfo.
author | Jason Rumney <jasonr@gnu.org> |
---|---|
date | Mon, 05 Jun 2006 21:20:59 +0000 |
parents | a2e78f6a049e |
children | 13093b401034 |
files | src/w32term.c |
diffstat | 1 files changed, 69 insertions(+), 147 deletions(-) [+] |
line wrap: on
line diff
--- a/src/w32term.c Mon Jun 05 21:20:22 2006 +0000 +++ b/src/w32term.c Mon Jun 05 21:20:59 2006 +0000 @@ -146,32 +146,6 @@ DWORD dwMainThreadId = 0; HANDLE hMainThread = NULL; -#ifndef SIF_ALL -/* These definitions are new with Windows 95. */ -#define SIF_RANGE 0x0001 -#define SIF_PAGE 0x0002 -#define SIF_POS 0x0004 -#define SIF_DISABLENOSCROLL 0x0008 -#define SIF_TRACKPOS 0x0010 -#define SIF_ALL (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS) - -typedef struct tagSCROLLINFO -{ - UINT cbSize; - UINT fMask; - int nMin; - int nMax; - UINT nPage; - int nPos; - int nTrackPos; -} SCROLLINFO, FAR *LPSCROLLINFO; -typedef SCROLLINFO CONST FAR *LPCSCROLLINFO; -#endif /* SIF_ALL */ - -/* Dynamic linking to new proportional scroll bar functions. */ -int (PASCAL *pfnSetScrollInfo) (HWND hwnd, int fnBar, LPSCROLLINFO lpsi, BOOL fRedraw); -BOOL (PASCAL *pfnGetScrollInfo) (HWND hwnd, int fnBar, LPSCROLLINFO lpsi); - int vertical_scroll_bar_min_handle; int vertical_scroll_bar_top_border; int vertical_scroll_bar_bottom_border; @@ -3487,6 +3461,7 @@ double range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)); int sb_page, sb_pos; BOOL draggingp = !NILP (bar->dragging) ? TRUE : FALSE; + SCROLLINFO si; if (whole) { @@ -3511,24 +3486,17 @@ BLOCK_INPUT; - if (pfnSetScrollInfo) - { - SCROLLINFO si; - - si.cbSize = sizeof (si); - /* Only update page size if currently dragging, to reduce - flicker effects. */ - if (draggingp) - si.fMask = SIF_PAGE; - else - si.fMask = SIF_PAGE | SIF_POS; - si.nPage = sb_page; - si.nPos = sb_pos; - - pfnSetScrollInfo (w, SB_CTL, &si, !draggingp); - } + si.cbSize = sizeof (si); + /* Only update page size if currently dragging, to reduce + flicker effects. */ + if (draggingp) + si.fMask = SIF_PAGE; else - SetScrollPos (w, SB_CTL, sb_pos, !draggingp); + si.fMask = SIF_PAGE | SIF_POS; + si.nPage = sb_page; + si.nPos = sb_pos; + + SetScrollInfo (w, SB_CTL, &si, !draggingp); UNBLOCK_INPUT; } @@ -3617,6 +3585,7 @@ { struct frame *f = XFRAME (WINDOW_FRAME (w)); HWND hwnd; + SCROLLINFO si; struct scroll_bar *bar = XSCROLL_BAR (Fmake_vector (make_number (SCROLL_BAR_VEC_SIZE), Qnil)); @@ -3635,26 +3604,15 @@ hwnd = my_create_scrollbar (f, bar); - if (pfnSetScrollInfo) - { - SCROLLINFO si; - - si.cbSize = sizeof (si); - si.fMask = SIF_ALL; - si.nMin = 0; - si.nMax = VERTICAL_SCROLL_BAR_TOP_RANGE (f, height) - + VERTICAL_SCROLL_BAR_MIN_HANDLE; - si.nPage = si.nMax; - si.nPos = 0; - - pfnSetScrollInfo (hwnd, SB_CTL, &si, FALSE); - } - else - { - SetScrollRange (hwnd, SB_CTL, 0, - VERTICAL_SCROLL_BAR_TOP_RANGE (f, height), FALSE); - SetScrollPos (hwnd, SB_CTL, 0, FALSE); - } + si.cbSize = sizeof (si); + si.fMask = SIF_ALL; + si.nMin = 0; + si.nMax = VERTICAL_SCROLL_BAR_TOP_RANGE (f, height) + + VERTICAL_SCROLL_BAR_MIN_HANDLE; + si.nPage = si.nMax; + si.nPos = 0; + + SetScrollInfo (hwnd, SB_CTL, &si, FALSE); SET_SCROLL_BAR_W32_WINDOW (bar, hwnd); @@ -3763,6 +3721,8 @@ else { HDC hdc; + SCROLLINFO si; + BLOCK_INPUT; if (width && height) { @@ -3782,21 +3742,15 @@ MoveWindow (hwnd, sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, top, sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, max (height, 1), TRUE); - if (pfnSetScrollInfo) - { - SCROLLINFO si; - - si.cbSize = sizeof (si); - si.fMask = SIF_RANGE; - si.nMin = 0; - si.nMax = VERTICAL_SCROLL_BAR_TOP_RANGE (f, height) - + VERTICAL_SCROLL_BAR_MIN_HANDLE; - - pfnSetScrollInfo (hwnd, SB_CTL, &si, FALSE); - } - else - SetScrollRange (hwnd, SB_CTL, 0, - VERTICAL_SCROLL_BAR_TOP_RANGE (f, height), FALSE); + + si.cbSize = sizeof (si); + si.fMask = SIF_RANGE; + si.nMin = 0; + si.nMax = VERTICAL_SCROLL_BAR_TOP_RANGE (f, height) + + VERTICAL_SCROLL_BAR_MIN_HANDLE; + + SetScrollInfo (hwnd, SB_CTL, &si, FALSE); + my_show_window (f, hwnd, SW_NORMAL); /* InvalidateRect (w, NULL, FALSE); */ @@ -3948,19 +3902,13 @@ int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)); int y; int dragging = !NILP (bar->dragging); - - if (pfnGetScrollInfo) - { - SCROLLINFO si; - - si.cbSize = sizeof (si); - si.fMask = SIF_POS; - - pfnGetScrollInfo ((HWND) msg->msg.lParam, SB_CTL, &si); - y = si.nPos; - } - else - y = GetScrollPos ((HWND) msg->msg.lParam, SB_CTL); + SCROLLINFO si; + + si.cbSize = sizeof (si); + si.fMask = SIF_POS; + + GetScrollInfo ((HWND) msg->msg.lParam, SB_CTL, &si); + y = si.nPos; bar->dragging = Qnil; @@ -3997,21 +3945,18 @@ emacs_event->part = scroll_bar_handle; /* "Silently" update current position. */ - if (pfnSetScrollInfo) - { - SCROLLINFO si; - - si.cbSize = sizeof (si); - si.fMask = SIF_POS; - si.nPos = y; - /* Remember apparent position (we actually lag behind the real - position, so don't set that directly. */ - last_scroll_bar_drag_pos = y; - - pfnSetScrollInfo (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, &si, FALSE); - } - else - SetScrollPos (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, y, FALSE); + { + SCROLLINFO si; + + si.cbSize = sizeof (si); + si.fMask = SIF_POS; + si.nPos = y; + /* Remember apparent position (we actually lag behind the real + position, so don't set that directly. */ + last_scroll_bar_drag_pos = y; + + SetScrollInfo (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, &si, FALSE); + } break; case SB_ENDSCROLL: /* If this is the end of a drag sequence, then reset the scroll @@ -4019,20 +3964,15 @@ nothing. */ if (dragging) { - if (pfnSetScrollInfo) - { - SCROLLINFO si; - int start = XINT (bar->start); - int end = XINT (bar->end); - - si.cbSize = sizeof (si); - si.fMask = SIF_PAGE | SIF_POS; - si.nPage = end - start + VERTICAL_SCROLL_BAR_MIN_HANDLE; - si.nPos = last_scroll_bar_drag_pos; - pfnSetScrollInfo (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, &si, TRUE); - } - else - SetScrollPos (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, y, TRUE); + SCROLLINFO si; + int start = XINT (bar->start); + int end = XINT (bar->end); + + si.cbSize = sizeof (si); + si.fMask = SIF_PAGE | SIF_POS; + si.nPage = end - start + VERTICAL_SCROLL_BAR_MIN_HANDLE; + si.nPos = last_scroll_bar_drag_pos; + SetScrollInfo (SCROLL_BAR_W32_WINDOW (bar), SB_CTL, &si, TRUE); } /* fall through */ default: @@ -4063,25 +4003,19 @@ FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); int pos; int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)); + SCROLLINFO si; BLOCK_INPUT; *fp = f; *bar_window = bar->window; - if (pfnGetScrollInfo) - { - SCROLLINFO si; - - si.cbSize = sizeof (si); - si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; - - pfnGetScrollInfo (w, SB_CTL, &si); - pos = si.nPos; - top_range = si.nMax - si.nPage + 1; - } - else - pos = GetScrollPos (w, SB_CTL); + si.cbSize = sizeof (si); + si.fMask = SIF_POS | SIF_PAGE | SIF_RANGE; + + GetScrollInfo (w, SB_CTL, &si); + pos = si.nPos; + top_range = si.nMax - si.nPage + 1; switch (LOWORD (last_mouse_scroll_bar_pos)) { @@ -6409,26 +6343,14 @@ AttachThreadInput (dwMainThreadId, dwWindowsThreadId, TRUE); #endif - /* Dynamically link to optional system components. */ + /* Load system settings. */ { - HANDLE user_lib = LoadLibrary ("user32.dll"); UINT smoothing_type; BOOL smoothing_enabled; -#define LOAD_PROC(fn) pfn##fn = (void *) GetProcAddress (user_lib, #fn) - - /* New proportional scroll bar functions. */ - LOAD_PROC (SetScrollInfo); - LOAD_PROC (GetScrollInfo); - -#undef LOAD_PROC - - FreeLibrary (user_lib); - /* If using proportional scroll bars, ensure handle is at least 5 pixels; otherwise use the fixed height. */ - vertical_scroll_bar_min_handle = (pfnSetScrollInfo != NULL) ? 5 : - GetSystemMetrics (SM_CYVTHUMB); + vertical_scroll_bar_min_handle = 5; /* For either kind of scroll bar, take account of the arrows; these effectively form the border of the main scroll bar range. */