mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Support JavaScript window.moveTo/By() and resizeTo/By() (fixes #698)
Adds new CefDisplayHandler::OnContentsBoundsChange and CefDisplayHandler::GetRootWindowScreenRect callbacks. cefclient: Implement the above callbacks and call CefBrowserHost::NotifyScreenInfoChanged when the root window bounds change. cefclient: osr: Use real screen bounds by default. Pass `--fake-screen-bounds` for the old default behavior. Load https://tests/window in cefclient for additional implementation details and usage examples.
This commit is contained in:
@ -427,6 +427,27 @@ CefEventHandle CefBrowserPlatformDelegateNativeWin::GetEventHandle(
|
||||
const_cast<CHROME_MSG*>(&event.os_event->native_event()));
|
||||
}
|
||||
|
||||
std::optional<gfx::Rect>
|
||||
CefBrowserPlatformDelegateNativeWin::GetRootWindowBounds() {
|
||||
if (window_widget_) {
|
||||
if (HWND hwnd = GetHostWindowHandle()) {
|
||||
if (HWND root_hwnd = ::GetAncestor(hwnd, GA_ROOT)) {
|
||||
RECT root_rect = {};
|
||||
if (::GetWindowRect(root_hwnd, &root_rect)) {
|
||||
auto* top_level =
|
||||
window_widget_->GetNativeWindow()->GetToplevelWindow();
|
||||
gfx::Rect bounds(root_rect);
|
||||
bounds = display::Screen::GetScreen()->ScreenToDIPRectInWindow(
|
||||
top_level, bounds);
|
||||
return bounds;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
ui::KeyEvent CefBrowserPlatformDelegateNativeWin::TranslateUiKeyEvent(
|
||||
const CefKeyEvent& key_event) const {
|
||||
int flags = TranslateUiEventModifiers(key_event.modifiers);
|
||||
@ -596,8 +617,8 @@ LRESULT CALLBACK CefBrowserPlatformDelegateNativeWin::WndProc(HWND hwnd,
|
||||
|
||||
case WM_MOVING:
|
||||
case WM_MOVE:
|
||||
if (browser) {
|
||||
browser->NotifyMoveOrResizeStarted();
|
||||
if (platform_delegate) {
|
||||
platform_delegate->NotifyMoveOrResizeStarted();
|
||||
}
|
||||
return 0;
|
||||
|
||||
|
Reference in New Issue
Block a user