15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Redistributions in binary form must reproduce the above
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution.
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     * Neither the name of Google Inc. nor the names of its
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission.
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
32f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPopupMenuImpl.h"
33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu
341e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/frame/FrameView.h"
35a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/Cursor.h"
36a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/NotImplemented.h"
371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/PlatformGestureEvent.h"
381e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/PlatformKeyboardEvent.h"
391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/PlatformMouseEvent.h"
401e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/PlatformWheelEvent.h"
411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/IntRect.h"
42a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsContext.h"
43a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/skia/SkiaUtils.h"
4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/Platform.h"
4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebCompositorSupport.h"
4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebContentLayer.h"
47d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "public/platform/WebFloatRect.h"
4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebLayerTreeView.h"
495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebRect.h"
50f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebInputEvent.h"
51f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebRange.h"
52f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebViewClient.h"
53f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebWidgetClient.h"
54f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/PopupContainer.h"
55f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/PopupMenuChromium.h"
56f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebInputEventConversion.h"
5793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include <skia/ext/platform_canvas.h>
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
5951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink {
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebPopupMenu ---------------------------------------------------------------
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebPopupMenu* WebPopupMenu::create(WebWidgetClient* client)
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Pass the WebPopupMenuImpl's self-reference to the caller.
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return adoptRef(new WebPopupMenuImpl(client)).leakRef();
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebWidget ------------------------------------------------------------------
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebPopupMenuImpl::WebPopupMenuImpl(WebWidgetClient* client)
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    : m_client(client)
7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    , m_layerTreeView(0)
7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    // Set to impossible point so we always get the first mouse position.
7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    , m_lastMousePosition(WebPoint(-1, -1))
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_widget(0)
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebPopupMenuImpl::~WebPopupMenuImpl()
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_widget)
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget->setClient(0);
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void WebPopupMenuImpl::willCloseLayerTreeView()
8709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_layerTreeView = 0;
8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebPopupMenuImpl::initialize(PopupContainer* widget, const WebRect& bounds)
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_widget = widget;
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_widget->setClient(this);
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
96f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    if (!m_client)
97f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        return;
98f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    m_client->setWindowRect(bounds);
99f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    m_client->show(WebNavigationPolicy()); // Policy is ignored.
100f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)
101f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    m_client->initializeLayerTreeView();
102f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    m_layerTreeView = m_client->layerTreeView();
103f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)    if (m_layerTreeView) {
104f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        m_layerTreeView->setVisible(true);
105f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        m_layerTreeView->setDeviceScaleFactor(m_client->deviceScaleFactor());
106f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        m_rootLayer = adoptPtr(Platform::current()->compositorSupport()->createContentLayer(this));
107f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        m_rootLayer->layer()->setBounds(m_size);
108f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)        m_layerTreeView->setRootLayer(*m_rootLayer->layer());
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::handleMouseMove(const WebMouseEvent& event)
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Don't send mouse move messages if the mouse hasn't moved.
1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (event.x != m_lastMousePosition.x || event.y != m_lastMousePosition.y) {
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_lastMousePosition = WebPoint(event.x, event.y);
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget->handleMouseMoveEvent(PlatformMouseEventBuilder(m_widget, event));
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        // We cannot call setToolTipText() in PopupContainer, because PopupContainer is in WebCore, and we cannot refer to WebKit from Webcore.
12009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        PopupContainer* container = static_cast<PopupContainer*>(m_widget);
121e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)        client()->setToolTipText(container->getSelectedItemToolTip(), toWebTextDirection(container->menuStyle().textDirection()));
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::handleMouseLeave(const WebMouseEvent& event)
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_widget->handleMouseMoveEvent(PlatformMouseEventBuilder(m_widget, event));
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::handleMouseDown(const WebMouseEvent& event)
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_widget->handleMouseDownEvent(PlatformMouseEventBuilder(m_widget, event));
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::handleMouseUp(const WebMouseEvent& event)
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    mouseCaptureLost();
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_widget->handleMouseReleaseEvent(PlatformMouseEventBuilder(m_widget, event));
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::handleMouseWheel(const WebMouseWheelEvent& event)
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_widget->handleWheelEvent(PlatformWheelEventBuilder(m_widget, event));
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::handleGestureEvent(const WebGestureEvent& event)
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_widget->handleGestureEvent(PlatformGestureEventBuilder(m_widget, event));
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::handleTouchEvent(const WebTouchEvent& event)
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PlatformTouchEventBuilder touchEventBuilder(m_widget, event);
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool defaultPrevented(m_widget->handleTouchEvent(touchEventBuilder));
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return defaultPrevented;
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::handleKeyEvent(const WebKeyboardEvent& event)
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return m_widget->handleKeyEvent(PlatformKeyboardEventBuilder(event));
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebWidget -------------------------------------------------------------------
1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::close()
1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_widget)
1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget->hide();
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_client = 0;
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    deref(); // Balances ref() from WebPopupMenu::create.
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::willStartLiveResize()
1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::resize(const WebSize& newSize)
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_size == newSize)
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_size = newSize;
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_widget) {
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        IntRect newGeometry(0, 0, m_size.width, m_size.height);
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget->setFrameRect(newGeometry);
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_client) {
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        WebRect damagedRect(0, 0, m_size.width, m_size.height);
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_client->didInvalidateRect(damagedRect);
1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
19509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
19609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (m_rootLayer)
19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        m_rootLayer->layer()->setBounds(newSize);
1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::willEndLiveResize()
2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
204c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)void WebPopupMenuImpl::beginFrame(const WebBeginFrameArgs&)
2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::layout()
2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebPopupMenuImpl::paintContents(WebCanvas* canvas, const WebRect& rect, bool, WebContentLayerClient::GraphicsContextStatus contextStatus)
21309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
21409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (!m_widget)
21509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        return;
21609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
21709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (!rect.isEmpty()) {
218323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)        GraphicsContext context(canvas,
219323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)            contextStatus == WebContentLayerClient::GraphicsContextEnabled ? GraphicsContext::NothingDisabled : GraphicsContext::FullyDisabled);
22009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        m_widget->paint(&context, rect);
22109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    }
22209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
22309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
224d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void WebPopupMenuImpl::paint(WebCanvas* canvas, const WebRect& rect)
2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_widget)
2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!rect.isEmpty()) {
23053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)        GraphicsContext context(canvas);
2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        context.applyDeviceScaleFactor(m_client->deviceScaleFactor());
2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget->paint(&context, rect);
2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::themeChanged()
2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    notImplemented();
2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::handleInputEvent(const WebInputEvent& inputEvent)
2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_widget)
2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // FIXME: WebKit seems to always return false on mouse events methods. For
2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // now we'll assume it has processed them (as we are only interested in
2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // whether keyboard events are processed).
2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    switch (inputEvent.type) {
2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::MouseMove:
251197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        handleMouseMove(static_cast<const WebMouseEvent&>(inputEvent));
2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::MouseLeave:
255197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        handleMouseLeave(static_cast<const WebMouseEvent&>(inputEvent));
2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::MouseWheel:
259197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        handleMouseWheel(static_cast<const WebMouseWheelEvent&>(inputEvent));
2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::MouseDown:
263197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        handleMouseDown(static_cast<const WebMouseEvent&>(inputEvent));
2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::MouseUp:
267197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        handleMouseUp(static_cast<const WebMouseEvent&>(inputEvent));
2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return true;
2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // In Windows, RawKeyDown only has information about the physical key, but
2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // for "selection", we need the information about the character the key
2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // translated into. For English, the physical key value and the character
2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // value are the same, hence, "selection" works for English. But for other
2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // languages, such as Hebrew, the character value is different from the
2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // physical key value. Thus, without accepting Char event type which
2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // contains the key's character value, the "selection" won't work for
2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // non-English languages, such as Hebrew.
2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::RawKeyDown:
2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::KeyDown:
2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::KeyUp:
2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::Char:
282197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return handleKeyEvent(static_cast<const WebKeyboardEvent&>(inputEvent));
2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::TouchStart:
2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::TouchMove:
2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::TouchEnd:
2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::TouchCancel:
288197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return handleTouchEvent(static_cast<const WebTouchEvent&>(inputEvent));
2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureScrollBegin:
2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureScrollEnd:
2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureScrollUpdate:
293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    case WebInputEvent::GestureScrollUpdateWithoutPropagation:
2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureFlingStart:
2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureFlingCancel:
2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureTap:
29753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    case WebInputEvent::GestureTapUnconfirmed:
2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureTapDown:
2991e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    case WebInputEvent::GestureShowPress:
3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureTapCancel:
3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureDoubleTap:
3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureTwoFingerTap:
3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureLongPress:
3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GestureLongTap:
3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GesturePinchBegin:
3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GesturePinchEnd:
3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::GesturePinchUpdate:
308197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        return handleGestureEvent(static_cast<const WebGestureEvent&>(inputEvent));
3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::Undefined:
3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::MouseEnter:
3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    case WebInputEvent::ContextMenu:
3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return false;
3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::mouseCaptureLost()
3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::setFocus(bool)
3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::setComposition(const WebString&, const WebVector<WebCompositionUnderline>&, int, int)
3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::confirmComposition()
3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
336591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochbool WebPopupMenuImpl::confirmComposition(ConfirmCompositionBehavior)
337591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch{
338591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    return false;
339591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch}
340591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::confirmComposition(const WebString&)
3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::compositionRange(size_t* location, size_t* length)
3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *location = 0;
3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *length = 0;
3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPopupMenuImpl::caretOrSelectionRange(size_t* location, size_t* length)
3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *location = 0;
3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    *length = 0;
3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return false;
3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::setTextDirection(WebTextDirection)
3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)//-----------------------------------------------------------------------------
366e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)// HostWindow
3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
36853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void WebPopupMenuImpl::invalidateContentsAndRootView(const IntRect& paintRect)
3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (paintRect.isEmpty())
3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_client)
3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_client->didInvalidateRect(paintRect);
37409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    if (m_rootLayer)
37509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        m_rootLayer->layer()->invalidateRect(FloatRect(paintRect));
3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
37853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void WebPopupMenuImpl::invalidateContentsForSlowScroll(const IntRect& updateRect)
3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
38053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    invalidateContentsAndRootView(updateRect);
3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPopupMenuImpl::scheduleAnimation()
3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntRect WebPopupMenuImpl::rootViewToScreen(const IntRect& rect) const
3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    notImplemented();
3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    return IntRect();
3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
39353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebScreenInfo WebPopupMenuImpl::screenInfo() const
39453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){
39553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    return WebScreenInfo();
39653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)}
39753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)
3987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebPopupMenuImpl::popupClosed(PopupContainer* widget)
3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(widget == m_widget);
4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_widget) {
4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget->setClient(0);
4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_widget = 0;
4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_client)
4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        m_client->closeWidgetSoon();
4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
40951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink
410