Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2477)

Unified Diff: Source/web/PopupContainer.cpp

Issue 562513004: Remove FramelessScrollView. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix Windows build. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/web/PopupContainer.h ('k') | Source/web/PopupContainerClient.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/web/PopupContainer.cpp
diff --git a/Source/web/PopupContainer.cpp b/Source/web/PopupContainer.cpp
index 4b4ecdc998adf9690bda0162cc234cb121e13018..617a604c0556b70c27363e635e0304f0287c8b1e 100644
--- a/Source/web/PopupContainer.cpp
+++ b/Source/web/PopupContainer.cpp
@@ -47,10 +47,10 @@
#include "platform/UserGestureIndicator.h"
#include "platform/geometry/IntRect.h"
#include "platform/graphics/GraphicsContext.h"
-#include "platform/scroll/FramelessScrollViewClient.h"
#include "public/web/WebPopupMenuInfo.h"
#include "public/web/WebPopupType.h"
#include "public/web/WebViewClient.h"
+#include "web/PopupContainerClient.h"
#include "web/WebPopupMenuImpl.h"
#include "web/WebViewImpl.h"
#include <limits>
@@ -59,7 +59,7 @@ namespace blink {
static const int borderSize = 1;
-static PlatformMouseEvent constructRelativeMouseEvent(const PlatformMouseEvent& e, FramelessScrollView* parent, FramelessScrollView* child)
+static PlatformMouseEvent constructRelativeMouseEvent(const PlatformMouseEvent& e, PopupContainer* parent, PopupListBox* child)
{
IntPoint pos = parent->convertSelfToChild(child, e.position());
@@ -71,7 +71,7 @@ static PlatformMouseEvent constructRelativeMouseEvent(const PlatformMouseEvent&
return relativeEvent;
}
-static PlatformWheelEvent constructRelativeWheelEvent(const PlatformWheelEvent& e, FramelessScrollView* parent, FramelessScrollView* child)
+static PlatformWheelEvent constructRelativeWheelEvent(const PlatformWheelEvent& e, PopupContainer* parent, PopupListBox* child)
{
IntPoint pos = parent->convertSelfToChild(child, e.position());
@@ -90,16 +90,16 @@ PassRefPtr<PopupContainer> PopupContainer::create(PopupMenuClient* client, bool
}
PopupContainer::PopupContainer(PopupMenuClient* client, bool deviceSupportsTouch)
- : m_listBox(PopupListBox::create(client, deviceSupportsTouch))
+ : m_listBox(PopupListBox::create(client, deviceSupportsTouch, this))
, m_popupOpen(false)
+ , m_client(0)
{
- setScrollbarModes(ScrollbarAlwaysOff, ScrollbarAlwaysOff);
}
PopupContainer::~PopupContainer()
{
- if (m_listBox && m_listBox->parent())
- removeChild(m_listBox.get());
+ if (m_listBox->parent())
+ m_listBox->setParent(0);
}
IntRect PopupContainer::layoutAndCalculateWidgetRectInternal(IntRect widgetRectInScreen, int targetControlHeight, const FloatRect& windowRect, const FloatRect& screen, bool isRTL, const int rtlOffset, const int verticalOffset, const IntSize& transformOffset, PopupContent* listBox, bool& needToResizeView)
@@ -212,14 +212,14 @@ IntRect PopupContainer::layoutAndCalculateWidgetRect(int targetControlHeight, co
void PopupContainer::showPopup(FrameView* view)
{
m_frameView = view;
- listBox()->m_focusedElement = m_frameView->frame().document()->focusedElement();
+ m_listBox->m_focusedElement = m_frameView->frame().document()->focusedElement();
IntSize transformOffset(m_controlPosition.p4().x() - m_controlPosition.p1().x(), m_controlPosition.p4().y() - m_controlPosition.p1().y() - m_controlSize.height());
popupOpened(layoutAndCalculateWidgetRect(m_controlSize.height(), transformOffset, roundedIntPoint(m_controlPosition.p4())));
m_popupOpen = true;
if (!m_listBox->parent())
- addChild(m_listBox.get());
+ m_listBox->setParent(this);
// Enable scrollbars after the listbox is inserted into the hierarchy,
// so it has a proper WidgetClient.
@@ -232,7 +232,7 @@ void PopupContainer::showPopup(FrameView* view)
void PopupContainer::hidePopup()
{
- listBox()->abandon();
+ m_listBox->abandon();
}
void PopupContainer::notifyPopupHidden()
@@ -378,9 +378,9 @@ void PopupContainer::showInRect(const FloatQuad& controlPosition, const IntSize&
// The controlSize is the size of the select box. It's usually larger than
// we need. Subtract border size so that usually the container will be
// displayed exactly the same width as the select box.
- listBox()->setBaseWidth(max(controlSize.width() - borderSize * 2, 0));
+ m_listBox->setBaseWidth(max(controlSize.width() - borderSize * 2, 0));
- listBox()->updateFromElement();
+ m_listBox->updateFromElement();
// We set the selected item in updateFromElement(), and disregard the
// index passed into this function (same as Webkit's PopupMenuWin.cpp)
@@ -405,8 +405,8 @@ void PopupContainer::showInRect(const FloatQuad& controlPosition, const IntSize&
IntRect PopupContainer::refresh(const IntRect& targetControlRect)
{
- listBox()->setBaseWidth(max(m_controlSize.width() - borderSize * 2, 0));
- listBox()->updateFromElement();
+ m_listBox->setBaseWidth(max(m_controlSize.width() - borderSize * 2, 0));
+ m_listBox->updateFromElement();
IntPoint locationInWindow = m_frameView->contentsToWindow(targetControlRect.location());
@@ -460,7 +460,7 @@ String PopupContainer::getSelectedItemToolTip()
// We cannot use m_popupClient->selectedIndex() to choose tooltip message,
// because the selectedIndex() might return final selected index, not
// hovering selection.
- return listBox()->m_popupClient->itemToolTip(listBox()->m_selectedIndex);
+ return m_listBox->m_popupClient->itemToolTip(m_listBox->m_selectedIndex);
}
void PopupContainer::popupOpened(const IntRect& bounds)
@@ -514,4 +514,15 @@ void PopupContainer::getPopupMenuInfo(WebPopupMenuInfo* info)
info->rightAligned = menuStyle().textDirection() == RTL;
}
+void PopupContainer::invalidateRect(const IntRect& rect)
+{
+ if (HostWindow* h = hostWindow())
+ h->invalidateContentsAndRootView(rect);
+}
+
+HostWindow* PopupContainer::hostWindow() const
+{
+ return const_cast<PopupContainerClient*>(m_client);
+}
+
} // namespace blink
« no previous file with comments | « Source/web/PopupContainer.h ('k') | Source/web/PopupContainerClient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698