OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
84 DCHECK(m_popup->widgetClient()); | 84 DCHECK(m_popup->widgetClient()); |
85 } | 85 } |
86 | 86 |
87 void closeWindowSoon() override | 87 void closeWindowSoon() override |
88 { | 88 { |
89 m_popup->closePopup(); | 89 m_popup->closePopup(); |
90 } | 90 } |
91 | 91 |
92 IntRect windowRect() override | 92 IntRect windowRect() override |
93 { | 93 { |
94 return m_popup->m_windowRectInScreen; | 94 return m_popup->windowRectInScreen(); |
95 } | 95 } |
96 | 96 |
97 IntRect viewportToScreen(const IntRect& rect, const Widget* widget) const ov erride | 97 IntRect viewportToScreen(const IntRect& rect, const Widget* widget) const ov erride |
98 { | 98 { |
99 WebRect rectInScreen(rect); | 99 WebRect rectInScreen(rect); |
100 WebRect windowRect = m_popup->windowRectInScreen(); | |
100 m_popup->widgetClient()->convertViewportToWindow(&rectInScreen); | 101 m_popup->widgetClient()->convertViewportToWindow(&rectInScreen); |
101 rectInScreen.x += m_popup->m_windowRectInScreen.x; | 102 rectInScreen.x += windowRect.x; |
102 rectInScreen.y += m_popup->m_windowRectInScreen.y; | 103 rectInScreen.y += windowRect.y; |
103 return rectInScreen; | 104 return rectInScreen; |
104 } | 105 } |
105 | 106 |
106 void addMessageToConsole(LocalFrame*, MessageSource, MessageLevel, const Str ing& message, unsigned lineNumber, const String&, const String&) override | 107 void addMessageToConsole(LocalFrame*, MessageSource, MessageLevel, const Str ing& message, unsigned lineNumber, const String&, const String&) override |
107 { | 108 { |
108 #ifndef NDEBUG | 109 #ifndef NDEBUG |
109 fprintf(stderr, "CONSOLE MESSSAGE:%u: %s\n", lineNumber, message.utf8(). data()); | 110 fprintf(stderr, "CONSOLE MESSSAGE:%u: %s\n", lineNumber, message.utf8(). data()); |
110 #endif | 111 #endif |
111 } | 112 } |
112 | 113 |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
330 Document* document = toLocalFrame(m_page->mainFrame())->document(); | 331 Document* document = toLocalFrame(m_page->mainFrame())->document(); |
331 if (!document) | 332 if (!document) |
332 return 0; | 333 return 0; |
333 AXObjectCache* cache = document->axObjectCache(); | 334 AXObjectCache* cache = document->axObjectCache(); |
334 DCHECK(cache); | 335 DCHECK(cache); |
335 return toAXObjectCacheImpl(cache)->getOrCreate(document->layoutView()); | 336 return toAXObjectCacheImpl(cache)->getOrCreate(document->layoutView()); |
336 } | 337 } |
337 | 338 |
338 void WebPagePopupImpl::setWindowRect(const IntRect& rectInScreen) | 339 void WebPagePopupImpl::setWindowRect(const IntRect& rectInScreen) |
339 { | 340 { |
340 m_windowRectInScreen = rectInScreen; | 341 widgetClient()->setWindowRect(rectInScreen); |
341 widgetClient()->setWindowRect(m_windowRectInScreen); | |
342 } | 342 } |
343 | 343 |
344 void WebPagePopupImpl::setRootGraphicsLayer(GraphicsLayer* layer) | 344 void WebPagePopupImpl::setRootGraphicsLayer(GraphicsLayer* layer) |
345 { | 345 { |
346 m_rootGraphicsLayer = layer; | 346 m_rootGraphicsLayer = layer; |
347 m_rootLayer = layer ? layer->platformLayer() : 0; | 347 m_rootLayer = layer ? layer->platformLayer() : 0; |
348 | 348 |
349 setIsAcceleratedCompositingActive(layer); | 349 setIsAcceleratedCompositingActive(layer); |
350 if (m_layerTreeView) { | 350 if (m_layerTreeView) { |
351 if (m_rootLayer) { | 351 if (m_rootLayer) { |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
409 { | 409 { |
410 if (!m_closing) | 410 if (!m_closing) |
411 PageWidgetDelegate::paint(*m_page, canvas, rect, *m_page->deprecatedLoca lMainFrame()); | 411 PageWidgetDelegate::paint(*m_page, canvas, rect, *m_page->deprecatedLoca lMainFrame()); |
412 } | 412 } |
413 | 413 |
414 void WebPagePopupImpl::resize(const WebSize& newSizeInViewport) | 414 void WebPagePopupImpl::resize(const WebSize& newSizeInViewport) |
415 { | 415 { |
416 WebRect newSize(0, 0, newSizeInViewport.width, newSizeInViewport.height); | 416 WebRect newSize(0, 0, newSizeInViewport.width, newSizeInViewport.height); |
417 widgetClient()->convertViewportToWindow(&newSize); | 417 widgetClient()->convertViewportToWindow(&newSize); |
418 | 418 |
419 setWindowRect(WebRect(m_windowRectInScreen.x, m_windowRectInScreen.y, newSiz e.width, newSize.height)); | 419 WebRect windowRect = windowRectInScreen(); |
420 | |
421 if (windowRect.width != newSize.width | |
422 && windowRect.height != newSize.height) { | |
423 windowRect.width = newSize.width; | |
424 windowRect.height = newSize.height; | |
425 setWindowRect(windowRect); | |
426 } | |
427 | |
420 if (m_page) { | 428 if (m_page) { |
421 toLocalFrame(m_page->mainFrame())->view()->resize(newSizeInViewport); | 429 toLocalFrame(m_page->mainFrame())->view()->resize(newSizeInViewport); |
422 m_page->frameHost().visualViewport().setSize(newSizeInViewport); | 430 m_page->frameHost().visualViewport().setSize(newSizeInViewport); |
423 } | 431 } |
424 | 432 |
425 m_widgetClient->didInvalidateRect(WebRect(0, 0, newSize.width, newSize.heigh t)); | 433 m_widgetClient->didInvalidateRect(WebRect(0, 0, newSize.width, newSize.heigh t)); |
bokan
2016/04/21 22:04:44
The FrameView and VisualViewport calls above have
| |
426 } | 434 } |
427 | 435 |
428 WebInputEventResult WebPagePopupImpl::handleKeyEvent(const WebKeyboardEvent& eve nt) | 436 WebInputEventResult WebPagePopupImpl::handleKeyEvent(const WebKeyboardEvent& eve nt) |
429 { | 437 { |
430 return handleKeyEvent(PlatformKeyboardEventBuilder(event)); | 438 return handleKeyEvent(PlatformKeyboardEventBuilder(event)); |
431 } | 439 } |
432 | 440 |
433 WebInputEventResult WebPagePopupImpl::handleCharEvent(const WebKeyboardEvent& ev ent) | 441 WebInputEventResult WebPagePopupImpl::handleCharEvent(const WebKeyboardEvent& ev ent) |
434 { | 442 { |
435 return handleKeyEvent(PlatformKeyboardEventBuilder(event)); | 443 return handleKeyEvent(PlatformKeyboardEventBuilder(event)); |
(...skipping 24 matching lines...) Expand all Loading... | |
460 if (isViewportPointInWindow(event.x, event.y)) | 468 if (isViewportPointInWindow(event.x, event.y)) |
461 return PageWidgetEventHandler::handleMouseWheel(mainFrame, event); | 469 return PageWidgetEventHandler::handleMouseWheel(mainFrame, event); |
462 cancel(); | 470 cancel(); |
463 return WebInputEventResult::NotHandled; | 471 return WebInputEventResult::NotHandled; |
464 } | 472 } |
465 | 473 |
466 bool WebPagePopupImpl::isViewportPointInWindow(int x, int y) | 474 bool WebPagePopupImpl::isViewportPointInWindow(int x, int y) |
467 { | 475 { |
468 WebRect pointInWindow(x, y, 0, 0); | 476 WebRect pointInWindow(x, y, 0, 0); |
469 widgetClient()->convertViewportToWindow(&pointInWindow); | 477 widgetClient()->convertViewportToWindow(&pointInWindow); |
470 return IntRect(0, 0, m_windowRectInScreen.width, m_windowRectInScreen.height ).contains(IntPoint(pointInWindow.x, pointInWindow.y)); | 478 WebRect windowRect = windowRectInScreen(); |
479 return IntRect(0, 0, windowRect.width, windowRect.height).contains(IntPoint( pointInWindow.x, pointInWindow.y)); | |
471 } | 480 } |
472 | 481 |
473 WebInputEventResult WebPagePopupImpl::handleInputEvent(const WebInputEvent& even t) | 482 WebInputEventResult WebPagePopupImpl::handleInputEvent(const WebInputEvent& even t) |
474 { | 483 { |
475 if (m_closing) | 484 if (m_closing) |
476 return WebInputEventResult::NotHandled; | 485 return WebInputEventResult::NotHandled; |
477 return PageWidgetDelegate::handleInputEvent(*this, event, m_page->deprecated LocalMainFrame()); | 486 return PageWidgetDelegate::handleInputEvent(*this, event, m_page->deprecated LocalMainFrame()); |
478 } | 487 } |
479 | 488 |
480 WebInputEventResult WebPagePopupImpl::handleKeyEvent(const PlatformKeyboardEvent & event) | 489 WebInputEventResult WebPagePopupImpl::handleKeyEvent(const PlatformKeyboardEvent & event) |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
540 } | 549 } |
541 | 550 |
542 void WebPagePopupImpl::compositeAndReadbackAsync(WebCompositeAndReadbackAsyncCal lback* callback) | 551 void WebPagePopupImpl::compositeAndReadbackAsync(WebCompositeAndReadbackAsyncCal lback* callback) |
543 { | 552 { |
544 DCHECK(isAcceleratedCompositingActive()); | 553 DCHECK(isAcceleratedCompositingActive()); |
545 m_layerTreeView->compositeAndReadbackAsync(callback); | 554 m_layerTreeView->compositeAndReadbackAsync(callback); |
546 } | 555 } |
547 | 556 |
548 WebPoint WebPagePopupImpl::positionRelativeToOwner() | 557 WebPoint WebPagePopupImpl::positionRelativeToOwner() |
549 { | 558 { |
550 WebRect windowRect = m_webView->client()->rootWindowRect(); | 559 WebRect rootWindowRect = m_webView->client()->rootWindowRect(); |
551 return WebPoint(m_windowRectInScreen.x - windowRect.x, m_windowRectInScreen. y - windowRect.y); | 560 WebRect windowRect = windowRectInScreen(); |
561 return WebPoint(windowRect.x - rootWindowRect.x, windowRect.y - rootWindowRe ct.y); | |
552 } | 562 } |
553 | 563 |
554 void WebPagePopupImpl::cancel() | 564 void WebPagePopupImpl::cancel() |
555 { | 565 { |
556 if (m_popupClient) | 566 if (m_popupClient) |
557 m_popupClient->closePopup(); | 567 m_popupClient->closePopup(); |
558 } | 568 } |
559 | 569 |
570 WebRect WebPagePopupImpl::windowRectInScreen() const | |
571 { | |
572 return widgetClient()->windowRect(); | |
573 } | |
574 | |
560 // WebPagePopup ---------------------------------------------------------------- | 575 // WebPagePopup ---------------------------------------------------------------- |
561 | 576 |
562 WebPagePopup* WebPagePopup::create(WebWidgetClient* client) | 577 WebPagePopup* WebPagePopup::create(WebWidgetClient* client) |
563 { | 578 { |
564 if (!client) | 579 if (!client) |
565 CRASH(); | 580 CRASH(); |
566 // A WebPagePopupImpl instance usually has two references. | 581 // A WebPagePopupImpl instance usually has two references. |
567 // - One owned by the instance itself. It represents the visible widget. | 582 // - One owned by the instance itself. It represents the visible widget. |
568 // - One owned by a WebViewImpl. It's released when the WebViewImpl ask the | 583 // - One owned by a WebViewImpl. It's released when the WebViewImpl ask the |
569 // WebPagePopupImpl to close. | 584 // WebPagePopupImpl to close. |
570 // We need them because the closing operation is asynchronous and the widget | 585 // We need them because the closing operation is asynchronous and the widget |
571 // can be closed while the WebViewImpl is unaware of it. | 586 // can be closed while the WebViewImpl is unaware of it. |
572 return adoptRef(new WebPagePopupImpl(client)).leakRef(); | 587 return adoptRef(new WebPagePopupImpl(client)).leakRef(); |
573 } | 588 } |
574 | 589 |
575 } // namespace blink | 590 } // namespace blink |
OLD | NEW |