janke99 / chromiumembedded

Automatically exported from code.google.com/p/chromiumembedded
0 stars 0 forks source link

OS mouse wheel scrolling settings not respected by CEF in branch 2171 #1481

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
When using mouse wheel to scroll CEF will jump by about 9 lines during a single 
scroll.

My settings:

  Control Panel > Mouse > Wheel > Vertical Scrolling >
  Roll the wheel one notch to scroll:
  The following number of lines at a time: 3

In Google Chrome it works fine. When using mouse wheel page is scrolled 
vertically by 3 lines. In CEF it is about 9 lines and this is much too fast. 
Seems like OS mouse settings are not respected.

CEF: cef_binary_3.2171.1949_windows32_client.
OS: Windows 7 64-bit SP1.

It worked fine in branch 1650.

Original issue reported on code.google.com by czarek.t...@gmail.com on 5 Jan 2015 at 9:29

GoogleCodeExporter commented 9 years ago
To clarify: Chrome does not match the OS setting and never has. See 
https://code.google.com/p/chromium/issues/detail?id=38378.

BUT there is a CEF regression here: CEF scrolls exactly twice as much as 
Chromium does. For example:

1. Go to any web page (e.g. http://cefbuilds.com/)
2. Scroll down exactly one mouse wheel "click"
3. Use screenshots to calculate the amount scrolled

Chrome scrolls 100px, while cefclient scrolls 200px. This did not happen back 
on the old 1547 branch, so it is definitely a regression -- just not sure how 
recent.

In cefclient, sometimes I think I can actually see a repaint in the middle of 
the distance -- almost like it's processing two copies of the mouse event in 
rapid succession.

Original comment by ytp...@gmail.com on 5 Jan 2015 at 9:39

GoogleCodeExporter commented 9 years ago
I have measured it and can confirm that it is 100px in case of Google Chrome 
and 200px in case of CEF.

Original comment by czarek.t...@gmail.com on 5 Jan 2015 at 10:13

GoogleCodeExporter commented 9 years ago
Here's a regression window:

cefclient 3.2171.1875 - bug
cefclient 3.2062.1930 - no bug

So it looks like it broke as soon as the 2171 branch was created.

Original comment by ytp...@gmail.com on 8 Jan 2015 at 10:32

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Please note, it shouldn't scroll 100px, or any number of pixels. It should 
scroll however many *lines* has been set in the Mouse settings, or scroll by a 
whole page if that's been set.

The number of pixels to scroll then, depends on the (root?) font size, screen 
pixel density, and zoom.

Original comment by thany81 on 14 Jan 2015 at 9:46

GoogleCodeExporter commented 9 years ago
@thany81: I think that's a much bigger request, since Chrome itself does not 
implement that behavior. IMHO we should first focus on fixing the regression, 
so CEF does not scroll twice as fast as Chrome.

Are you ok with spinning off a new, separate bug / enhancement request about 
switching from Chrome's behavior to true line-based scrolling? (Or perhaps even 
file a bug on Chromium itself -- though given the bug I linked above, they may 
disagree and mark it WONTFIX again).

Original comment by ytp...@gmail.com on 22 Jan 2015 at 10:54

GoogleCodeExporter commented 9 years ago
Did offscreen rendering land between 2062 and 2171? The changes for OSR 
(https://code.google.com/p/chromiumembedded/source/detail?r=1751) touch a lot 
of code related to mousewheel handling...

Original comment by ytp...@gmail.com on 22 Jan 2015 at 10:57

GoogleCodeExporter commented 9 years ago
I just thought of this: should we also verify the behaviour of scrollwheels 
that can tick to the sides? It feels alright, but it'd be nice to keep the two 
directions at least vaguely scrolling at the same speed.

@ytp: filed a bug. thanks for the tip.

Original comment by thany81 on 27 Jan 2015 at 8:17

GoogleCodeExporter commented 9 years ago
When running cefclient in OSR mode it scrolls fine by 100px:

  cefclient --url=http://cefbuilds.com --off-screen-rendering-enabled

Without the off-screen rendering flag it scrolls twice fast by 200px. I've also 
tried the cefsimple application and it scrolls by 200px as well.

The only references in source code to mouse wheel scrolling are in 
browser_host_impl in methods PlatformTranslateWheelEvent and 
SendMouseWheelEvent. These methods are used only by OSR mode in which scrolling 
works fine.

I've also tried calling SendMouseWheelEvent() in cefsimple which runs in 
windowed mode and the scrolling worked fine, it scrolled by 100px. So when you 
call the CEF mouse wheel scrolling functions it works as expected. The issue 
seems to be caused by upgrading Chromium from branch 2062 => to 2171.

Tested with CEF 3 branch 2272 revision 1998.

Original comment by czarek.t...@gmail.com on 29 Jan 2015 at 3:47

GoogleCodeExporter commented 9 years ago
@#9: Do you have text or dpi scaling configured on your machine? Try running 
with the `--force-device-scale-factor=1` command-line flag to see if that helps 
at all. See also 
http://www.ubergizmo.com/how-to/how-to-google-chrome-hidpi-support-windows/.

Original comment by magreenb...@gmail.com on 29 Jan 2015 at 4:05

GoogleCodeExporter commented 9 years ago
@#10 magreenb...:

It doesn't matter what are DPI settings, the issue still persists. I have tried 
the `--force-device-scale-factor=1` and `--high-dpi-support=1` flags, it didn't 
help. I have also tried restoring default DPI settings on my Win7 (text size 
150% Larger ==> to 100% smaller), but it also didn't help.

As someone mentioned earlier it looks like the wheel scrolling event occurs 
twice in a very fast sequence one after the other. I'm almost sure of that as 
when testing on cefbuilds.com you can see the CEF logo image flickering during 
scrolling.

I have debugged this further using Window Detective. Attachin screenshot. I 
have tested WM_MOUSEWHEEL messages in both cefclient and in Google Chrome. 
There are three "Window Messages" windows: the two on the left are for 
cefclient (CefBrowserWindow + Chrome_WidgetWin_0), the one on the right is for 
Google Chrome (Chrome_Widget_Win_1). You can see that in cefclient the 
Chrome_WidgetWin window receives two WM_MOUSEWHEEL events both with delta=-120 
(one scroll down event). In Chrome there is only one WM_MOUSEWHEEL event. I 
have performed a single wheel scroll in both cefclient and Google Chrome.

Attaching wheel_issue.jpg.

Original comment by czarek.t...@gmail.com on 29 Jan 2015 at 5:16

Attachments:

GoogleCodeExporter commented 9 years ago
I've debugged also CEF 3.2062.1930 in which scrolling works fine. Launched 
cefclient. In Window Detective in CefBrowserWindow the two messages are the 
same (send message and return value) and in Chrome_WidgetWin I can see only one 
WM_MOUSEWHEEL event (post message). In branches 2171 and 2272 in 
Chrome_WidgetWin there are three WM_MOUSEWHEEL events (post message, send 
message and return value).

Original comment by czarek.t...@gmail.com on 29 Jan 2015 at 5:38

GoogleCodeExporter commented 9 years ago
Attaching a patch against cefclient. This is just a temporary fix, kind of a 
hack, for those that need it.

Original comment by czarek.t...@gmail.com on 30 Jan 2015 at 12:15

Attachments:

GoogleCodeExporter commented 9 years ago
This is a Windows-only issue. On Linux scrolling works just fine. The title of 
this issue is misleading, as this is not about OS mouse settings, but about 
WM_MOUSEWHEEL event being fired twice. This bug was introduced somewhere 
between branches 2062..2171. I think there is already enough information 
provided for this issue to be accepted.

Original comment by czarek.t...@gmail.com on 30 Jan 2015 at 12:50

GoogleCodeExporter commented 9 years ago
CEF is transitioning from Google Code to Bitbucket project hosting. If you 
would like to continue receiving notifications on this issue please add 
yourself as a Watcher at the new location: 
https://bitbucket.org/chromiumembedded/cef/issue/1481

Original comment by magreenb...@gmail.com on 14 Mar 2015 at 3:36