Commit 818a1a5d authored by Jason Rumney's avatar Jason Rumney
Browse files

(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.
parent 94856834
......@@ -146,32 +146,6 @@ HANDLE hWindowsThread = NULL;
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 @@ w32_set_scroll_bar_thumb (bar, portion, position, whole)
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 @@ w32_set_scroll_bar_thumb (bar, portion, position, whole)
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 @@ x_scroll_bar_create (w, top, left, width, height)
{
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 @@ x_scroll_bar_create (w, top, left, width, height)
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;
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);
}
SetScrollInfo (hwnd, SB_CTL, &si, FALSE);
SET_SCROLL_BAR_W32_WINDOW (bar, hwnd);
......@@ -3763,6 +3721,8 @@ w32_set_vertical_scroll_bar (w, portion, whole, position)
else
{
HDC hdc;
SCROLLINFO si;
BLOCK_INPUT;
if (width && height)
{
......@@ -3782,21 +3742,15 @@ w32_set_vertical_scroll_bar (w, portion, whole, position)
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;
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);
pfnSetScrollInfo (hwnd, SB_CTL, &si, FALSE);
}
else
SetScrollRange (hwnd, SB_CTL, 0,
VERTICAL_SCROLL_BAR_TOP_RANGE (f, height), FALSE);
my_show_window (f, hwnd, SW_NORMAL);
/* InvalidateRect (w, NULL, FALSE); */
......@@ -3948,19 +3902,13 @@ w32_scroll_bar_handle_click (bar, msg, emacs_event)
int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height));
int y;
int dragging = !NILP (bar->dragging);
SCROLLINFO si;
if (pfnGetScrollInfo)
{
SCROLLINFO si;
si.cbSize = sizeof (si);
si.fMask = SIF_POS;
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);
GetScrollInfo ((HWND) msg->msg.lParam, SB_CTL, &si);
y = si.nPos;
bar->dragging = Qnil;
......@@ -3997,21 +3945,18 @@ w32_scroll_bar_handle_click (bar, msg, emacs_event)
emacs_event->part = scroll_bar_handle;
/* "Silently" update current position. */
if (pfnSetScrollInfo)
{
SCROLLINFO si;
{
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;
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);
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 @@ w32_scroll_bar_handle_click (bar, msg, emacs_event)
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 @@ x_scroll_bar_report_motion (fp, bar_window, part, x, y, time)
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;
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);
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 @@ w32_initialize ()
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. */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment