Skip to content

Commit e1405ef

Browse files
committed
Canonical link: https://commits.webkit.org/13429@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@16028 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 08f069f commit e1405ef

17 files changed

Lines changed: 210 additions & 186 deletions

WebCore/ChangeLog

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
2006-08-24 Geoffrey Garen <ggaren@apple.com>
2+
3+
Reviewed by Darin.
4+
5+
Frame refactoring: changed FrameView clients so they no longer assume that
6+
FrameViews are Widgets that can tell you things about the platform, in
7+
preparation for divorcing FrameViews from heavy-weight Widgets altogether.
8+
9+
This patch makes Page, rather than Widget, responsible for answering
10+
questions about the screen (scale factor, color depth, etc.). Refactoring
11+
aside, I think this makes more sense, since (a) the screen has nothing to do
12+
with any particular widget and (b) Page was already half-responsible for
13+
answering those questions, anyway.
14+
15+
Plus some random Windows build fix goodness.
16+
17+
Layout tests still pass.
18+
119
2006-08-24 Timothy Hatcher <timothy@apple.com>
220

321
Reviewed by Hyatt.

WebCore/bindings/js/kjs_window.cpp

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -175,24 +175,24 @@ bool Screen::getOwnPropertySlot(ExecState *exec, const Identifier& propertyName,
175175

176176
JSValue* Screen::getValueProperty(ExecState*, int token) const
177177
{
178-
Widget* widget = m_frame ? m_frame->view() : 0;
178+
Page* page = m_frame ? m_frame->page() : 0;
179179

180180
switch (token) {
181181
case Height:
182-
return jsNumber(screenRect(widget).height());
182+
return jsNumber(screenRect(page).height());
183183
case Width:
184-
return jsNumber(screenRect(widget).width());
184+
return jsNumber(screenRect(page).width());
185185
case ColorDepth:
186186
case PixelDepth:
187-
return jsNumber(screenDepth(widget));
187+
return jsNumber(screenDepth(page));
188188
case AvailLeft:
189-
return jsNumber(usableScreenRect(widget).x() - screenRect(widget).x());
189+
return jsNumber(usableScreenRect(page).x() - screenRect(page).x());
190190
case AvailTop:
191-
return jsNumber(usableScreenRect(widget).y() - screenRect(widget).y());
191+
return jsNumber(usableScreenRect(page).y() - screenRect(page).y());
192192
case AvailHeight:
193-
return jsNumber(usableScreenRect(widget).height());
193+
return jsNumber(usableScreenRect(page).height());
194194
case AvailWidth:
195-
return jsNumber(usableScreenRect(widget).width());
195+
return jsNumber(usableScreenRect(page).width());
196196
default:
197197
return jsUndefined();
198198
}
@@ -615,7 +615,7 @@ static JSValue* showModalDialog(ExecState* exec, Window* openerWindow, const Lis
615615
// - help: boolFeature(features, "help", true), makes help icon appear in dialog (what does it do on Windows?)
616616
// - unadorned: trusted && boolFeature(features, "unadorned");
617617

618-
FloatRect screenRect = usableScreenRect(openerWindow->frame()->view());
618+
FloatRect screenRect = usableScreenRect(openerWindow->frame()->page());
619619

620620
wargs.width = floatFeature(features, "dialogwidth", 100, screenRect.width(), 620); // default here came from frame size of dialog in MacIE
621621
wargs.widthSet = true;
@@ -1508,6 +1508,7 @@ JSValue *WindowFunc::callAsFunction(ExecState *exec, JSObject *thisObj, const Li
15081508
return jsUndefined();
15091509

15101510
FrameView *widget = frame->view();
1511+
Page* page = frame->page();
15111512
JSValue *v = args[0];
15121513
UString s = v->toString(exec);
15131514
String str = s;
@@ -1552,7 +1553,7 @@ JSValue *WindowFunc::callAsFunction(ExecState *exec, JSObject *thisObj, const Li
15521553
WindowArgs windowArgs;
15531554
String features = args[2]->isUndefinedOrNull() ? UString() : args[2]->toString(exec);
15541555
parseWindowFeatures(features, windowArgs);
1555-
constrainToVisible(screenRect(widget), windowArgs);
1556+
constrainToVisible(screenRect(page), windowArgs);
15561557

15571558
// prepare arguments
15581559
KURL url;
@@ -1634,45 +1635,45 @@ JSValue *WindowFunc::callAsFunction(ExecState *exec, JSObject *thisObj, const Li
16341635
widget->setContentsPos(args[0]->toInt32(exec), args[1]->toInt32(exec));
16351636
return jsUndefined();
16361637
case Window::MoveBy:
1637-
if (args.size() >= 2 && widget) {
1638-
FloatRect r = frame->page()->windowRect();
1638+
if (args.size() >= 2 && page) {
1639+
FloatRect r = page->windowRect();
16391640
r.move(args[0]->toNumber(exec), args[1]->toNumber(exec));
16401641
// Security check (the spec talks about UniversalBrowserWrite to disable this check...)
1641-
if (screenRect(widget).contains(r))
1642-
frame->page()->setWindowRect(r);
1642+
if (screenRect(page).contains(r))
1643+
page->setWindowRect(r);
16431644
}
16441645
return jsUndefined();
16451646
case Window::MoveTo:
1646-
if (args.size() >= 2 && widget) {
1647-
FloatRect r = frame->page()->windowRect();
1648-
FloatRect sr = screenRect(widget);
1647+
if (args.size() >= 2 && page) {
1648+
FloatRect r = page->windowRect();
1649+
FloatRect sr = screenRect(page);
16491650
r.setLocation(sr.location());
16501651
r.move(args[0]->toNumber(exec), args[1]->toNumber(exec));
16511652
// Security check (the spec talks about UniversalBrowserWrite to disable this check...)
16521653
if (sr.contains(r))
1653-
frame->page()->setWindowRect(r);
1654+
page->setWindowRect(r);
16541655
}
16551656
return jsUndefined();
16561657
case Window::ResizeBy:
1657-
if (args.size() >= 2 && widget) {
1658-
FloatRect r = frame->page()->windowRect();
1658+
if (args.size() >= 2 && page) {
1659+
FloatRect r = page->windowRect();
16591660
FloatSize dest = r.size() + FloatSize(args[0]->toNumber(exec), args[1]->toNumber(exec));
1660-
FloatRect sg = screenRect(widget);
1661+
FloatRect sg = screenRect(page);
16611662
// Security check: within desktop limits and bigger than 100x100 (per spec)
16621663
if (r.x() + dest.width() <= sg.right() && r.y() + dest.height() <= sg.bottom()
16631664
&& dest.width() >= 100 && dest.height() >= 100)
1664-
frame->page()->setWindowRect(FloatRect(r.location(), dest));
1665+
page->setWindowRect(FloatRect(r.location(), dest));
16651666
}
16661667
return jsUndefined();
16671668
case Window::ResizeTo:
1668-
if (args.size() >= 2 && widget) {
1669-
FloatRect r = frame->page()->windowRect();
1669+
if (args.size() >= 2 && page) {
1670+
FloatRect r = page->windowRect();
16701671
FloatSize dest = FloatSize(args[0]->toNumber(exec), args[1]->toNumber(exec));
1671-
FloatRect sg = screenRect(widget);
1672+
FloatRect sg = screenRect(page);
16721673
// Security check: within desktop limits and bigger than 100x100 (per spec)
16731674
if (r.x() + dest.width() <= sg.right() && r.y() + dest.height() <= sg.bottom() &&
16741675
dest.width() >= 100 && dest.height() >= 100)
1675-
frame->page()->setWindowRect(FloatRect(r.location(), dest));
1676+
page->setWindowRect(FloatRect(r.location(), dest));
16761677
}
16771678
return jsUndefined();
16781679
case Window::SetTimeout:

WebCore/bridge/mac/PageMac.mm

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,32 +29,24 @@
2929
namespace WebCore {
3030

3131
Page::Page(WebCorePageBridge* bridge)
32-
: m_frameCount(0)
33-
, m_widget(0)
34-
, m_bridge(bridge)
32+
: m_frameCount(0)
33+
, m_bridge(bridge)
3534

3635
{
3736
init();
3837
}
3938

40-
Widget* Page::widget() const
41-
{
42-
if (!m_widget)
43-
m_widget = new Widget([bridge() outerView]);
44-
return m_widget;
45-
}
46-
4739
// These methods scale between window and WebView coordinates because JavaScript/DOM operations
4840
// assume that the WebView and the window share the same coordinate system.
4941

5042
FloatRect Page::windowRect() const
5143
{
52-
return scaleScreenRectToWidget(flipScreenRect([bridge() windowFrame]), widget());
44+
return scaleScreenRectToPageCoordinates(flipScreenRect([bridge() windowFrame]), this);
5345
}
5446

5547
void Page::setWindowRect(const FloatRect& r)
5648
{
57-
[bridge() setWindowFrame:flipScreenRect(scaleWidgetRectToScreen(r, widget()))];
49+
[bridge() setWindowFrame:flipScreenRect(scalePageRectToScreenCoordinates(r, this))];
5850
}
5951

6052
}

0 commit comments

Comments
 (0)