riched20: Keep track of fractions of WHEEL_DELTA when scrolling.
This commit is contained in:
parent
2f07df59f9
commit
fa50baf31f
|
@ -2858,6 +2858,8 @@ ME_TextEditor *ME_MakeEditor(ITextHost *texthost, BOOL bEmulateVersion10)
|
||||||
ed->horz_si.nPage = 0;
|
ed->horz_si.nPage = 0;
|
||||||
ed->horz_si.nPos = 0;
|
ed->horz_si.nPos = 0;
|
||||||
|
|
||||||
|
ed->wheel_remain = 0;
|
||||||
|
|
||||||
OleInitialize(NULL);
|
OleInitialize(NULL);
|
||||||
|
|
||||||
return ed;
|
return ed;
|
||||||
|
@ -2936,6 +2938,13 @@ static inline int get_default_line_height( ME_TextEditor *editor )
|
||||||
return height;
|
return height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int calc_wheel_change( int *remain, int amount_per_click )
|
||||||
|
{
|
||||||
|
int change = amount_per_click * (float)*remain / WHEEL_DELTA;
|
||||||
|
*remain -= WHEEL_DELTA * change / amount_per_click;
|
||||||
|
return change;
|
||||||
|
}
|
||||||
|
|
||||||
static const char * const edit_messages[] = {
|
static const char * const edit_messages[] = {
|
||||||
"EM_GETSEL",
|
"EM_GETSEL",
|
||||||
"EM_SETSEL",
|
"EM_SETSEL",
|
||||||
|
@ -4145,6 +4154,7 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam,
|
||||||
case WM_KILLFOCUS:
|
case WM_KILLFOCUS:
|
||||||
ME_CommitUndo(editor); /* End coalesced undos for typed characters */
|
ME_CommitUndo(editor); /* End coalesced undos for typed characters */
|
||||||
editor->bHaveFocus = FALSE;
|
editor->bHaveFocus = FALSE;
|
||||||
|
editor->wheel_remain = 0;
|
||||||
ME_HideCaret(editor);
|
ME_HideCaret(editor);
|
||||||
ME_SendOldNotify(editor, EN_KILLFOCUS);
|
ME_SendOldNotify(editor, EN_KILLFOCUS);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -4273,8 +4283,7 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam,
|
||||||
}
|
}
|
||||||
case WM_MOUSEWHEEL:
|
case WM_MOUSEWHEEL:
|
||||||
{
|
{
|
||||||
int gcWheelDelta;
|
int delta;
|
||||||
UINT pulScrollLines;
|
|
||||||
BOOL ctrl_is_down;
|
BOOL ctrl_is_down;
|
||||||
|
|
||||||
if ((editor->nEventMask & ENM_MOUSEEVENTS) &&
|
if ((editor->nEventMask & ENM_MOUSEEVENTS) &&
|
||||||
|
@ -4283,9 +4292,16 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam,
|
||||||
|
|
||||||
ctrl_is_down = GetKeyState(VK_CONTROL) & 0x8000;
|
ctrl_is_down = GetKeyState(VK_CONTROL) & 0x8000;
|
||||||
|
|
||||||
gcWheelDelta = GET_WHEEL_DELTA_WPARAM(wParam);
|
delta = GET_WHEEL_DELTA_WPARAM(wParam);
|
||||||
|
|
||||||
if (abs(gcWheelDelta) >= WHEEL_DELTA)
|
/* if scrolling changes direction, ignore left overs */
|
||||||
|
if ((delta < 0 && editor->wheel_remain < 0) ||
|
||||||
|
(delta > 0 && editor->wheel_remain > 0))
|
||||||
|
editor->wheel_remain += delta;
|
||||||
|
else
|
||||||
|
editor->wheel_remain = delta;
|
||||||
|
|
||||||
|
if (editor->wheel_remain)
|
||||||
{
|
{
|
||||||
if (ctrl_is_down) {
|
if (ctrl_is_down) {
|
||||||
int numerator;
|
int numerator;
|
||||||
|
@ -4295,14 +4311,18 @@ LRESULT ME_HandleMessage(ME_TextEditor *editor, UINT msg, WPARAM wParam,
|
||||||
} else {
|
} else {
|
||||||
numerator = editor->nZoomNumerator * 100 / editor->nZoomDenominator;
|
numerator = editor->nZoomNumerator * 100 / editor->nZoomDenominator;
|
||||||
}
|
}
|
||||||
numerator = numerator + (gcWheelDelta / WHEEL_DELTA) * 10;
|
numerator += calc_wheel_change( &editor->wheel_remain, 10 );
|
||||||
if (numerator >= 10 && numerator <= 500)
|
if (numerator >= 10 && numerator <= 500)
|
||||||
ME_SetZoom(editor, numerator, 100);
|
ME_SetZoom(editor, numerator, 100);
|
||||||
} else {
|
} else {
|
||||||
SystemParametersInfoW(SPI_GETWHEELSCROLLLINES,0, &pulScrollLines, 0);
|
UINT max_lines = 3;
|
||||||
/* FIXME follow the original */
|
int lines = 0;
|
||||||
if (pulScrollLines)
|
|
||||||
ME_ScrollDown(editor,pulScrollLines * (-gcWheelDelta / WHEEL_DELTA) * 8);
|
SystemParametersInfoW( SPI_GETWHEELSCROLLLINES, 0, &max_lines, 0 );
|
||||||
|
if (max_lines)
|
||||||
|
lines = calc_wheel_change( &editor->wheel_remain, (int)max_lines );
|
||||||
|
if (lines)
|
||||||
|
ME_ScrollDown( editor, -lines * get_default_line_height( editor ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -443,6 +443,7 @@ typedef struct tagME_TextEditor
|
||||||
SCROLLINFO vert_si, horz_si;
|
SCROLLINFO vert_si, horz_si;
|
||||||
|
|
||||||
BOOL bMouseCaptured;
|
BOOL bMouseCaptured;
|
||||||
|
int wheel_remain;
|
||||||
} ME_TextEditor;
|
} ME_TextEditor;
|
||||||
|
|
||||||
typedef struct tagME_Context
|
typedef struct tagME_Context
|
||||||
|
|
Loading…
Reference in New Issue