18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc.  All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Collabora Ltd.  All rights reserved.
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef Widget_h
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define Widget_h
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
30bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include "IntRect.h"
31bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include <wtf/Forward.h>
32bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include <wtf/RefCounted.h>
33bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
34bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if PLATFORM(CHROMIUM)
35bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include "PlatformWidget.h"
36bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif
37bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
38bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if PLATFORM(MAC)
39bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include <wtf/RetainPtr.h>
40bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif
41bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
42bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if PLATFORM(QT)
43bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include <qglobal.h>
44cad810f21b803229eb11403f9209855525a25d57Steve Block#include <QWeakPointer>
45bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif
46bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(MAC)
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef __OBJC__
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@class NSView;
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@class NSWindow;
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass NSView;
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass NSWindow;
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
55bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsentypedef NSView *PlatformWidget;
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(ANDROID)
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass WebCoreViewBridge;
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef WebCoreViewBridge* PlatformWidget;
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WIN)
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct HWND__* HWND;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef HWND PlatformWidget;
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(GTK)
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct _GtkWidget GtkWidget;
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct _GtkContainer GtkContainer;
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef GtkWidget* PlatformWidget;
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(QT)
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQT_BEGIN_NAMESPACE
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass QWidget;
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectQT_END_NAMESPACE
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef QWidget* PlatformWidget;
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(WX)
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass wxWindow;
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef wxWindow* PlatformWidget;
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
86231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if PLATFORM(HAIKU)
87231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockclass BView;
88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blocktypedef BView* PlatformWidget;
89231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
90231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
91ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#if PLATFORM(BREWMP)
92ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blocktypedef void* PlatformWidget;
93ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif
94ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block
9521939df44de1705786c545cd1bf519d47250322dBen Murdoch#if PLATFORM(EFL)
9606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsentypedef struct _Evas_Object Evas_Object;
9706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsentypedef struct _Evas Evas;
9806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsentypedef struct _Ecore_Evas Ecore_Evas;
9921939df44de1705786c545cd1bf519d47250322dBen Murdochtypedef Evas_Object* PlatformWidget;
10021939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif
10121939df44de1705786c545cd1bf519d47250322dBen Murdoch
102231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if PLATFORM(QT)
103231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockclass QWebPageClient;
104231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blocktypedef QWebPageClient* PlatformPageClient;
105231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#else
106231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blocktypedef PlatformWidget PlatformPageClient;
107231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
108231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
111cad810f21b803229eb11403f9209855525a25d57Steve Blockclass AXObjectCache;
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Cursor;
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Event;
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Font;
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass GraphicsContext;
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass PlatformMouseEvent;
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass ScrollView;
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass WidgetPrivate;
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
120f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochenum WidgetNotification { WillPaintFlattened, DidPaintFlattened };
121f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// The Widget class serves as a base class for three kinds of objects:
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// (1) Scrollable areas (ScrollView)
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// (2) Scrollbars (Scrollbar)
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// (3) Plugins (PluginView)
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// A widget may or may not be backed by a platform-specific object (e.g., HWND on Windows, NSView on Mac, QWidget on Qt).
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Widgets are connected in a hierarchy, with the restriction that plugins and scrollbars are always leaves of the
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// tree.  Only ScrollViews can have children (and therefore the Widget class has no concept of children).
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// The rules right now for which widgets get platform-specific objects are as follows:
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// ScrollView - Mac
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Scrollbar - Mac, Gtk
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Plugin - Mac, Windows (windowed only), Qt (windowed only, widget is an HWND on windows), Gtk (windowed only)
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//
1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass Widget : public RefCounted<Widget> {
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Widget(PlatformWidget = 0);
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual ~Widget();
1410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
142bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    PlatformWidget platformWidget() const;
143bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    void setPlatformWidget(PlatformWidget);
144bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if PLATFORM(HAIKU)
146dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    PlatformWidget topLevelPlatformWidget() const { return m_topLevelPlatformWidget; }
147dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    void setTopLevelPlatformWidget(PlatformWidget widget)
148dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    {
149dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        m_topLevelPlatformWidget = widget;
150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    }
151dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int x() const { return frameRect().x(); }
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int y() const { return frameRect().y(); }
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int width() const { return frameRect().width(); }
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int height() const { return frameRect().height(); }
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntSize size() const { return frameRect().size(); }
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntPoint pos() const { return frameRect().location(); }
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void setFrameRect(const IntRect&);
16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    virtual void setBoundsSize(const IntSize&);
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual IntRect frameRect() const;
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntRect boundsRect() const { return IntRect(0, 0, width(),  height()); }
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
16581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void resize(int w, int h) { setFrameRect(IntRect(x(), y(), w, h)); setBoundsSize(IntSize(w, h)); }
16681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void resize(const IntSize& s) { setFrameRect(IntRect(pos(), s)); setBoundsSize(s); }
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void move(int x, int y) { setFrameRect(IntRect(x, y, width(), height())); }
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void move(const IntPoint& p) { setFrameRect(IntRect(p, size())); }
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void paint(GraphicsContext*, const IntRect&);
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void invalidate() { invalidateRect(boundsRect()); }
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void invalidateRect(const IntRect&) = 0;
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
17421939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual void setFocus(bool);
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setCursor(const Cursor&);
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void show();
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void hide();
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isSelfVisible() const { return m_selfVisible; } // Whether or not we have been explicitly marked as visible or not.
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isParentVisible() const { return m_parentVisible; } // Whether or not our parent is visible.
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool isVisible() const { return m_selfVisible && m_parentVisible; } // Whether or not we are actually visible.
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void setParentVisible(bool visible) { m_parentVisible = visible; }
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setSelfVisible(bool v) { m_selfVisible = v; }
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void setIsSelected(bool);
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool isFrameView() const { return false; }
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool isPluginView() const { return false; }
190967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    // FIXME: The Mac plug-in code should inherit from PluginView. When this happens PluginViewBase and PluginView can become one class.
191967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    virtual bool isPluginViewBase() const { return false; }
1925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    virtual bool isScrollbar() const { return false; }
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void removeFromParent();
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void setParent(ScrollView* view);
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ScrollView* parent() const { return m_parent; }
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ScrollView* root() const;
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void handleEvent(Event*) { }
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
201f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    virtual void notifyWidget(WidgetNotification) { }
202f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // It is important for cross-platform code to realize that Mac has flipped coordinates.  Therefore any code
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // that tries to convert the location of a rect using the point-based convertFromContainingWindow will end
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // up with an inaccurate rect.  Always make sure to use the rect-based convertFromContainingWindow method
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // when converting window rects.
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntRect convertToContainingWindow(const IntRect&) const;
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntRect convertFromContainingWindow(const IntRect&) const;
209dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
2100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntPoint convertToContainingWindow(const IntPoint&) const;
2110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntPoint convertFromContainingWindow(const IntPoint&) const;
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
21321939df44de1705786c545cd1bf519d47250322dBen Murdoch    virtual void frameRectsChanged();
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
215dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    // Notifies this widget that other widgets on the page have been repositioned.
216dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    virtual void widgetPositionsUpdated() {}
217dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
218d0825bca7fe65beaee391d30da42e937db621564Steve Block#if PLATFORM(MAC)
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    NSView* getOuterView() const;
220dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void beforeMouseDown(NSView*, Widget*);
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void afterMouseDown(NSView*, Widget*);
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void removeFromSuperview();
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
22721939df44de1705786c545cd1bf519d47250322dBen Murdoch#if PLATFORM(EFL)
22821939df44de1705786c545cd1bf519d47250322dBen Murdoch    // FIXME: These should really go to PlatformWidget. They're here currently since
22921939df44de1705786c545cd1bf519d47250322dBen Murdoch    // the EFL port considers that Evas_Object (a C object) is a PlatformWidget, but
23021939df44de1705786c545cd1bf519d47250322dBen Murdoch    // encapsulating that into a C++ class will make this header clean as it should be.
23121939df44de1705786c545cd1bf519d47250322dBen Murdoch    Evas* evas() const;
23221939df44de1705786c545cd1bf519d47250322dBen Murdoch
23321939df44de1705786c545cd1bf519d47250322dBen Murdoch    void setEvasObject(Evas_Object*);
23421939df44de1705786c545cd1bf519d47250322dBen Murdoch    Evas_Object* evasObject() const;
23521939df44de1705786c545cd1bf519d47250322dBen Murdoch
23621939df44de1705786c545cd1bf519d47250322dBen Murdoch    const String edjeTheme() const;
23721939df44de1705786c545cd1bf519d47250322dBen Murdoch    void setEdjeTheme(const String &);
23821939df44de1705786c545cd1bf519d47250322dBen Murdoch    const String edjeThemeRecursive() const;
23921939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif
24021939df44de1705786c545cd1bf519d47250322dBen Murdoch
241a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if PLATFORM(CHROMIUM)
242a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    virtual bool isPluginContainer() const { return false; }
243a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif
244a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
245cad810f21b803229eb11403f9209855525a25d57Steve Block#if PLATFORM(QT)
246cad810f21b803229eb11403f9209855525a25d57Steve Block    QObject* bindingObject() const;
247cad810f21b803229eb11403f9209855525a25d57Steve Block    void setBindingObject(QObject*);
248cad810f21b803229eb11403f9209855525a25d57Steve Block#endif
249cad810f21b803229eb11403f9209855525a25d57Steve Block
2500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Virtual methods to convert points to/from the containing ScrollView
2510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual IntRect convertToContainingView(const IntRect&) const;
2520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual IntRect convertFromContainingView(const IntRect&) const;
2530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual IntPoint convertToContainingView(const IntPoint&) const;
2540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual IntPoint convertFromContainingView(const IntPoint&) const;
2550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
256cad810f21b803229eb11403f9209855525a25d57Steve Block    // A means to access the AX cache when this object can get a pointer to it.
257cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual AXObjectCache* axObjectCache() const { return 0; }
258cad810f21b803229eb11403f9209855525a25d57Steve Block
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void init(PlatformWidget); // Must be called by all Widget constructors to initialize cross-platform data.
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void releasePlatformWidget();
2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void retainPlatformWidget();
264dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
2650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // These methods are used to convert from the root widget to the containing window,
2660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // which has behavior that may differ between platforms (e.g. Mac uses flipped window coordinates).
2670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static IntRect convertFromRootToContainingWindow(const Widget* rootWidget, const IntRect&);
2680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static IntRect convertFromContainingWindowToRoot(const Widget* rootWidget, const IntRect&);
269dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
2700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static IntPoint convertFromRootToContainingWindow(const Widget* rootWidget, const IntPoint&);
2710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static IntPoint convertFromContainingWindowToRoot(const Widget* rootWidget, const IntPoint&);
2720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ScrollView* m_parent;
275bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if !PLATFORM(MAC)
2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PlatformWidget m_widget;
277bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#else
278bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    RetainPtr<NSView> m_widget;
279bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_selfVisible;
2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool m_parentVisible;
282dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    IntRect m_frame; // Not used when a native widget exists.
2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
28521939df44de1705786c545cd1bf519d47250322dBen Murdoch#if PLATFORM(EFL)
28621939df44de1705786c545cd1bf519d47250322dBen Murdoch    // FIXME: Please see the previous #if PLATFORM(EFL) block.
28721939df44de1705786c545cd1bf519d47250322dBen Murdoch    Ecore_Evas* ecoreEvas() const;
28821939df44de1705786c545cd1bf519d47250322dBen Murdoch
28921939df44de1705786c545cd1bf519d47250322dBen Murdoch    void applyFallbackCursor();
29021939df44de1705786c545cd1bf519d47250322dBen Murdoch    void applyCursor();
29121939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif
29221939df44de1705786c545cd1bf519d47250322dBen Murdoch
29321939df44de1705786c545cd1bf519d47250322dBen Murdoch#if PLATFORM(MAC) || PLATFORM(EFL)
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WidgetPrivate* m_data;
2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
29621939df44de1705786c545cd1bf519d47250322dBen Murdoch
297cad810f21b803229eb11403f9209855525a25d57Steve Block#if PLATFORM(QT)
298cad810f21b803229eb11403f9209855525a25d57Steve Block    QWeakPointer<QObject> m_bindingObject;
299cad810f21b803229eb11403f9209855525a25d57Steve Block#endif
300cad810f21b803229eb11403f9209855525a25d57Steve Block
301eebae91469b8f225fe78e97ce6dae26efcf6da43Steve Block#if PLATFORM(HAIKU)
302eebae91469b8f225fe78e97ce6dae26efcf6da43Steve Block    PlatformWidget m_topLevelPlatformWidget;
303eebae91469b8f225fe78e97ce6dae26efcf6da43Steve Block#endif
3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if PLATFORM(ANDROID)
3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
306c05b3a990126a5a1de357c025e25e6acd4e4e185Grace Kloba    int textWrapWidth() const;
3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
310bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if !PLATFORM(MAC)
311bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
312bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monseninline PlatformWidget Widget::platformWidget() const
313bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{
314bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    return m_widget;
315bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen}
316bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
317bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monseninline void Widget::setPlatformWidget(PlatformWidget widget)
318bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{
319bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    if (widget != m_widget) {
320bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        releasePlatformWidget();
321bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        m_widget = widget;
322bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        retainPlatformWidget();
323bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    }
324bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen}
325bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
326bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif
327bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
328ec39fd6fb1e0ae6e61e6fcdea4197f54dda2713dKristian Monsen#if !PLATFORM(GTK) && !PLATFORM(ANDROID)
329bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
330bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monseninline void Widget::releasePlatformWidget()
331bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{
332bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen}
333bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
334bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monseninline void Widget::retainPlatformWidget()
335bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{
336bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen}
337bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
338bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif
339bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // Widget_h
343