#ifndef WebPopupMenuImpl_h
#define WebPopupMenuImpl_h
#include "WebPopupMenu.h"
#include "platform/scroll/FramelessScrollViewClient.h"
#include "public/platform/WebContentLayerClient.h"
#include "public/platform/WebPoint.h"
#include "public/platform/WebSize.h"
#include "wtf/OwnPtr.h"
#include "wtf/RefCounted.h"
namespace WebCore {
class LocalFrame;
class FramelessScrollView;
class KeyboardEvent;
class Page;
class PlatformKeyboardEvent;
class Range;
class Widget;
}
namespace blink {
class WebContentLayer;
class WebGestureEvent;
class WebKeyboardEvent;
class WebLayerTreeView;
class WebMouseEvent;
class WebMouseWheelEvent;
class WebRange;
struct WebRect;
class WebTouchEvent;
class WebPopupMenuImpl : public WebPopupMenu, public WebCore::FramelessScrollViewClient, public WebContentLayerClient, public RefCounted<WebPopupMenuImpl> {
WTF_MAKE_FAST_ALLOCATED;
public:
virtual void close() OVERRIDE FINAL;
virtual WebSize size() OVERRIDE FINAL { return m_size; }
virtual void willStartLiveResize() OVERRIDE FINAL;
virtual void resize(const WebSize&) OVERRIDE FINAL;
virtual void willEndLiveResize() OVERRIDE FINAL;
virtual void animate(double frameBeginTime) OVERRIDE FINAL;
virtual void layout() OVERRIDE FINAL;
virtual void enterForceCompositingMode(bool enable) OVERRIDE FINAL;
virtual void didExitCompositingMode() OVERRIDE FINAL;
virtual void paint(WebCanvas*, const WebRect&, PaintOptions = ReadbackFromCompositorIfAvailable) OVERRIDE FINAL;
virtual void themeChanged() OVERRIDE FINAL;
virtual bool handleInputEvent(const WebInputEvent&) OVERRIDE FINAL;
virtual void mouseCaptureLost() OVERRIDE FINAL;
virtual void setFocus(bool enable) OVERRIDE FINAL;
virtual bool setComposition(
const WebString& text,
const WebVector<WebCompositionUnderline>& underlines,
int selectionStart, int selectionEnd) OVERRIDE FINAL;
virtual bool confirmComposition() OVERRIDE FINAL;
virtual bool confirmComposition(ConfirmCompositionBehavior selectionBehavior) OVERRIDE FINAL;
virtual bool confirmComposition(const WebString& text) OVERRIDE FINAL;
virtual bool compositionRange(size_t* location, size_t* length) OVERRIDE FINAL;
virtual bool caretOrSelectionRange(size_t* location, size_t* length) OVERRIDE FINAL;
virtual void setTextDirection(WebTextDirection) OVERRIDE FINAL;
virtual bool isAcceleratedCompositingActive() const OVERRIDE FINAL { return false; }
virtual bool isPopupMenu() const OVERRIDE FINAL { return true; }
virtual void willCloseLayerTreeView() OVERRIDE FINAL;
virtual void paintContents(WebCanvas*, const WebRect& clip, bool canPaintLCDTest, WebFloatRect& opaque) OVERRIDE FINAL;
void initialize(WebCore::FramelessScrollView* widget, const WebRect& bounds);
WebWidgetClient* client() { return m_client; }
void handleMouseMove(const WebMouseEvent&);
void handleMouseLeave(const WebMouseEvent&);
void handleMouseDown(const WebMouseEvent&);
void handleMouseUp(const WebMouseEvent&);
void handleMouseDoubleClick(const WebMouseEvent&);
void handleMouseWheel(const WebMouseWheelEvent&);
bool handleGestureEvent(const WebGestureEvent&);
bool handleTouchEvent(const WebTouchEvent&);
bool handleKeyEvent(const WebKeyboardEvent&);
protected:
friend class WebPopupMenu;
friend class WTF::RefCounted<WebPopupMenuImpl>;
WebPopupMenuImpl(WebWidgetClient*);
~WebPopupMenuImpl();
virtual void invalidateContentsAndRootView(const WebCore::IntRect&) OVERRIDE FINAL;
virtual void invalidateContentsForSlowScroll(const WebCore::IntRect&) OVERRIDE FINAL;
virtual void scheduleAnimation() OVERRIDE FINAL;
virtual void scroll(
const WebCore::IntSize& scrollDelta, const WebCore::IntRect& scrollRect,
const WebCore::IntRect& clipRect) OVERRIDE FINAL;
virtual WebCore::IntRect rootViewToScreen(const WebCore::IntRect&) const OVERRIDE FINAL;
virtual WebScreenInfo screenInfo() const OVERRIDE FINAL;
virtual void popupClosed(WebCore::FramelessScrollView*) OVERRIDE FINAL;
WebWidgetClient* m_client;
WebSize m_size;
WebLayerTreeView* m_layerTreeView;
OwnPtr<WebContentLayer> m_rootLayer;
bool m_isAcceleratedCompositingActive;
WebPoint m_lastMousePosition;
WebCore::FramelessScrollView* m_widget;
};
DEFINE_TYPE_CASTS(WebPopupMenuImpl, WebWidget, widget, widget->isPopupMenu(), widget.isPopupMenu());
DEFINE_TYPE_CASTS(WebPopupMenuImpl, WebCore::FramelessScrollViewClient, client, true, true);
}
#endif