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

Side by Side Diff: Source/core/platform/Widget.cpp

Issue 26936002: Remove Widget's dependency upon its own inheritor aka ScrollView. This was nasty from an OO design… (Closed) Base URL: https://chromium.googlesource.com/chromium/blink@master
Patch Set: Fix for clang compile error Created 7 years, 2 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 unified diff | Download patch
« no previous file with comments | « Source/core/platform/Widget.h ('k') | Source/core/platform/chromium/PlatformScreenChromium.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006, 2010 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2005, 2006, 2010 Apple Inc. All rights reserved.
3 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the 11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution. 12 * documentation and/or other materials provided with the distribution.
13 * 13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */ 25 */
26 26
27 #include "config.h" 27 #include "config.h"
28 #include "core/platform/Widget.h" 28 #include "core/platform/Widget.h"
29 29
30 #include "core/platform/ScrollView.h"
31 #include "platform/HostWindow.h" 30 #include "platform/HostWindow.h"
32 #include "platform/geometry/IntRect.h" 31 #include "platform/geometry/IntRect.h"
33 32
34 #include "wtf/Assertions.h" 33 #include "wtf/Assertions.h"
35 34
36 namespace WebCore { 35 namespace WebCore {
37 36
38 Widget::Widget() 37 Widget::Widget()
39 : m_parent(0) 38 : m_parent(0)
40 , m_selfVisible(false) 39 , m_selfVisible(false)
41 , m_parentVisible(false) 40 , m_parentVisible(false)
42 { 41 {
43 } 42 }
44 43
45 Widget::~Widget() 44 Widget::~Widget()
46 { 45 {
47 ASSERT(!parent()); 46 ASSERT(!parent());
48 } 47 }
49 48
50 void Widget::setCursor(const Cursor& cursor) 49 void Widget::setCursor(const Cursor& cursor)
51 { 50 {
52 if (ScrollView* view = root()) 51 if (Widget* view = root())
53 view->hostWindow()->setCursor(cursor); 52 view->hostWindow()->setCursor(cursor);
54 } 53 }
55 54
56 void Widget::removeFromParent() 55 void Widget::setParent(Widget* widget)
57 { 56 {
58 if (parent()) 57 ASSERT(!widget || !m_parent);
59 parent()->removeChild(this); 58 if (!widget || !widget->isVisible())
60 }
61
62 void Widget::setParent(ScrollView* view)
63 {
64 ASSERT(!view || !m_parent);
65 if (!view || !view->isVisible())
66 setParentVisible(false); 59 setParentVisible(false);
67 m_parent = view; 60 m_parent = widget;
68 if (view && view->isVisible()) 61 if (widget && widget->isVisible())
69 setParentVisible(true); 62 setParentVisible(true);
70 } 63 }
71 64
72 ScrollView* Widget::root() const 65 Widget* Widget::root() const
73 { 66 {
74 const Widget* top = this; 67 const Widget* top = this;
75 while (top->parent()) 68 while (top->parent())
76 top = top->parent(); 69 top = top->parent();
77 if (top->isFrameView()) 70 if (top->isFrameView())
78 return const_cast<ScrollView*>(static_cast<const ScrollView*>(top)); 71 return const_cast<Widget*>(static_cast<const Widget*>(top));
72 return 0;
73 }
74
75 HostWindow* Widget::hostWindow() const
76 {
77 if (root())
78 root()->hostWindow();
79 ASSERT_NOT_REACHED();
79 return 0; 80 return 0;
80 } 81 }
81 82
82 IntRect Widget::convertFromRootView(const IntRect& rootRect) const 83 IntRect Widget::convertFromRootView(const IntRect& rootRect) const
83 { 84 {
84 if (const ScrollView* parentScrollView = parent()) { 85 if (const Widget* parentWidget = parent()) {
85 IntRect parentRect = parentScrollView->convertFromRootView(rootRect); 86 IntRect parentRect = parentWidget->convertFromRootView(rootRect);
86 return convertFromContainingView(parentRect); 87 return convertFromContainingView(parentRect);
87 } 88 }
88 return rootRect; 89 return rootRect;
89 } 90 }
90 91
91 IntRect Widget::convertToRootView(const IntRect& localRect) const 92 IntRect Widget::convertToRootView(const IntRect& localRect) const
92 { 93 {
93 if (const ScrollView* parentScrollView = parent()) { 94 if (const Widget* parentWidget = parent()) {
94 IntRect parentRect = convertToContainingView(localRect); 95 IntRect parentRect = convertToContainingView(localRect);
95 return parentScrollView->convertToRootView(parentRect); 96 return parentWidget->convertToRootView(parentRect);
96 } 97 }
97 return localRect; 98 return localRect;
98 } 99 }
99 100
100 IntPoint Widget::convertFromRootView(const IntPoint& rootPoint) const 101 IntPoint Widget::convertFromRootView(const IntPoint& rootPoint) const
101 { 102 {
102 if (const ScrollView* parentScrollView = parent()) { 103 if (const Widget* parentWidget = parent()) {
103 IntPoint parentPoint = parentScrollView->convertFromRootView(rootPoint); 104 IntPoint parentPoint = parentWidget->convertFromRootView(rootPoint);
104 return convertFromContainingView(parentPoint); 105 return convertFromContainingView(parentPoint);
105 } 106 }
106 return rootPoint; 107 return rootPoint;
107 } 108 }
108 109
109 IntPoint Widget::convertToRootView(const IntPoint& localPoint) const 110 IntPoint Widget::convertToRootView(const IntPoint& localPoint) const
110 { 111 {
111 if (const ScrollView* parentScrollView = parent()) { 112 if (const Widget* parentWidget = parent()) {
112 IntPoint parentPoint = convertToContainingView(localPoint); 113 IntPoint parentPoint = convertToContainingView(localPoint);
113 return parentScrollView->convertToRootView(parentPoint); 114 return parentWidget->convertToRootView(parentPoint);
114 } 115 }
115 return localPoint; 116 return localPoint;
116 } 117 }
117 118
118 IntRect Widget::convertFromContainingWindow(const IntRect& windowRect) const 119 IntRect Widget::convertFromContainingWindow(const IntRect& windowRect) const
119 { 120 {
120 if (const ScrollView* parentScrollView = parent()) { 121 if (const Widget* parentWidget = parent()) {
121 IntRect parentRect = parentScrollView->convertFromContainingWindow(windo wRect); 122 IntRect parentRect = parentWidget->convertFromContainingWindow(windowRec t);
122 return convertFromContainingView(parentRect); 123 return convertFromContainingView(parentRect);
123 } 124 }
124 return windowRect; 125 return windowRect;
125 } 126 }
126 127
127 IntRect Widget::convertToContainingWindow(const IntRect& localRect) const 128 IntRect Widget::convertToContainingWindow(const IntRect& localRect) const
128 { 129 {
129 if (const ScrollView* parentScrollView = parent()) { 130 if (const Widget* parentWidget = parent()) {
130 IntRect parentRect = convertToContainingView(localRect); 131 IntRect parentRect = convertToContainingView(localRect);
131 return parentScrollView->convertToContainingWindow(parentRect); 132 return parentWidget->convertToContainingWindow(parentRect);
132 } 133 }
133 return localRect; 134 return localRect;
134 } 135 }
135 136
136 IntPoint Widget::convertFromContainingWindow(const IntPoint& windowPoint) const 137 IntPoint Widget::convertFromContainingWindow(const IntPoint& windowPoint) const
137 { 138 {
138 if (const ScrollView* parentScrollView = parent()) { 139 if (const Widget* parentWidget = parent()) {
139 IntPoint parentPoint = parentScrollView->convertFromContainingWindow(win dowPoint); 140 IntPoint parentPoint = parentWidget->convertFromContainingWindow(windowP oint);
140 return convertFromContainingView(parentPoint); 141 return convertFromContainingView(parentPoint);
141 } 142 }
142 return windowPoint; 143 return windowPoint;
143 } 144 }
144 145
145 IntPoint Widget::convertToContainingWindow(const IntPoint& localPoint) const 146 IntPoint Widget::convertToContainingWindow(const IntPoint& localPoint) const
146 { 147 {
147 if (const ScrollView* parentScrollView = parent()) { 148 if (const Widget* parentWidget = parent()) {
148 IntPoint parentPoint = convertToContainingView(localPoint); 149 IntPoint parentPoint = convertToContainingView(localPoint);
149 return parentScrollView->convertToContainingWindow(parentPoint); 150 return parentWidget->convertToContainingWindow(parentPoint);
150 } 151 }
151 return localPoint; 152 return localPoint;
152 } 153 }
153 154
154 IntRect Widget::convertToContainingView(const IntRect& localRect) const 155 IntRect Widget::convertToContainingView(const IntRect& localRect) const
155 { 156 {
156 if (const ScrollView* parentScrollView = parent()) { 157 if (const Widget* parentWidget = parent()) {
157 IntRect parentRect(localRect); 158 IntRect parentRect(localRect);
158 parentRect.setLocation(parentScrollView->convertChildToSelf(this, localR ect.location())); 159 parentRect.setLocation(parentWidget->convertChildToSelf(this, localRect. location()));
159 return parentRect; 160 return parentRect;
160 } 161 }
161 return localRect; 162 return localRect;
162 } 163 }
163 164
164 IntRect Widget::convertFromContainingView(const IntRect& parentRect) const 165 IntRect Widget::convertFromContainingView(const IntRect& parentRect) const
165 { 166 {
166 if (const ScrollView* parentScrollView = parent()) { 167 if (const Widget* parentWidget = parent()) {
167 IntRect localRect = parentRect; 168 IntRect localRect = parentRect;
168 localRect.setLocation(parentScrollView->convertSelfToChild(this, localRe ct.location())); 169 localRect.setLocation(parentWidget->convertSelfToChild(this, localRect.l ocation()));
169 return localRect; 170 return localRect;
170 } 171 }
171 172
172 return parentRect; 173 return parentRect;
173 } 174 }
174 175
175 IntPoint Widget::convertToContainingView(const IntPoint& localPoint) const 176 IntPoint Widget::convertToContainingView(const IntPoint& localPoint) const
176 { 177 {
177 if (const ScrollView* parentScrollView = parent()) 178 if (const Widget* parentWidget = parent())
178 return parentScrollView->convertChildToSelf(this, localPoint); 179 return parentWidget->convertChildToSelf(this, localPoint);
179 180
180 return localPoint; 181 return localPoint;
181 } 182 }
182 183
183 IntPoint Widget::convertFromContainingView(const IntPoint& parentPoint) const 184 IntPoint Widget::convertFromContainingView(const IntPoint& parentPoint) const
184 { 185 {
185 if (const ScrollView* parentScrollView = parent()) 186 if (const Widget* parentWidget = parent())
186 return parentScrollView->convertSelfToChild(this, parentPoint); 187 return parentWidget->convertSelfToChild(this, parentPoint);
187 188
188 return parentPoint; 189 return parentPoint;
189 } 190 }
190 191
192 IntPoint Widget::convertChildToSelf(const Widget*, const IntPoint& point) const
193 {
194 return point;
195 }
196
197 IntPoint Widget::convertSelfToChild(const Widget*, const IntPoint& point) const
198 {
199 return point;
200 }
201
191 } // namespace WebCore 202 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/platform/Widget.h ('k') | Source/core/platform/chromium/PlatformScreenChromium.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698