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