From cad810f21b803229eb11403f9209855525a25d57 Mon Sep 17 00:00:00 2001 From: Steve Block Date: Fri, 6 May 2011 11:45:16 +0100 Subject: Merge WebKit at r75315: Initial merge by git. Change-Id: I570314b346ce101c935ed22a626b48c2af266b84 --- Source/WebCore/platform/Widget.cpp | 173 +++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 Source/WebCore/platform/Widget.cpp (limited to 'Source/WebCore/platform/Widget.cpp') diff --git a/Source/WebCore/platform/Widget.cpp b/Source/WebCore/platform/Widget.cpp new file mode 100644 index 0000000..77560ff --- /dev/null +++ b/Source/WebCore/platform/Widget.cpp @@ -0,0 +1,173 @@ +/* + * Copyright (C) 2004, 2005, 2006, 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "Widget.h" + +#include "IntRect.h" +#include "ScrollView.h" + +#include + +namespace WebCore { + +void Widget::init(PlatformWidget widget) +{ + m_parent = 0; + m_selfVisible = false; + m_parentVisible = false; + m_widget = widget; + if (m_widget) + retainPlatformWidget(); +} + +void Widget::setParent(ScrollView* view) +{ + ASSERT(!view || !m_parent); + if (!view || !view->isVisible()) + setParentVisible(false); + m_parent = view; + if (view && view->isVisible()) + setParentVisible(true); +} + +ScrollView* Widget::root() const +{ + const Widget* top = this; + while (top->parent()) + top = top->parent(); + if (top->isFrameView()) + return const_cast(static_cast(top)); + return 0; +} + +void Widget::removeFromParent() +{ + if (parent()) + parent()->removeChild(this); +} + +IntRect Widget::convertFromContainingWindow(const IntRect& windowRect) const +{ + if (const ScrollView* parentScrollView = parent()) { + IntRect parentRect = parentScrollView->convertFromContainingWindow(windowRect); + return convertFromContainingView(parentRect); + } + return convertFromContainingWindowToRoot(this, windowRect); +} + +IntRect Widget::convertToContainingWindow(const IntRect& localRect) const +{ + if (const ScrollView* parentScrollView = parent()) { + IntRect parentRect = convertToContainingView(localRect); + return parentScrollView->convertToContainingWindow(parentRect); + } + return convertFromRootToContainingWindow(this, localRect); +} + +IntPoint Widget::convertFromContainingWindow(const IntPoint& windowPoint) const +{ + if (const ScrollView* parentScrollView = parent()) { + IntPoint parentPoint = parentScrollView->convertFromContainingWindow(windowPoint); + return convertFromContainingView(parentPoint); + } + return convertFromContainingWindowToRoot(this, windowPoint); +} + +IntPoint Widget::convertToContainingWindow(const IntPoint& localPoint) const +{ + if (const ScrollView* parentScrollView = parent()) { + IntPoint parentPoint = convertToContainingView(localPoint); + return parentScrollView->convertToContainingWindow(parentPoint); + } + return convertFromRootToContainingWindow(this, localPoint); +} + +#if !PLATFORM(MAC) +IntRect Widget::convertFromRootToContainingWindow(const Widget*, const IntRect& rect) +{ + return rect; +} + +IntRect Widget::convertFromContainingWindowToRoot(const Widget*, const IntRect& rect) +{ + return rect; +} + +IntPoint Widget::convertFromRootToContainingWindow(const Widget*, const IntPoint& point) +{ + return point; +} + +IntPoint Widget::convertFromContainingWindowToRoot(const Widget*, const IntPoint& point) +{ + return point; +} +#endif + +IntRect Widget::convertToContainingView(const IntRect& localRect) const +{ + if (const ScrollView* parentScrollView = parent()) { + IntRect parentRect(localRect); + parentRect.setLocation(parentScrollView->convertChildToSelf(this, localRect.location())); + return parentRect; + } + return localRect; +} + +IntRect Widget::convertFromContainingView(const IntRect& parentRect) const +{ + if (const ScrollView* parentScrollView = parent()) { + IntRect localRect = parentRect; + localRect.setLocation(parentScrollView->convertSelfToChild(this, localRect.location())); + return localRect; + } + + return parentRect; +} + +IntPoint Widget::convertToContainingView(const IntPoint& localPoint) const +{ + if (const ScrollView* parentScrollView = parent()) + return parentScrollView->convertChildToSelf(this, localPoint); + + return localPoint; +} + +IntPoint Widget::convertFromContainingView(const IntPoint& parentPoint) const +{ + if (const ScrollView* parentScrollView = parent()) + return parentScrollView->convertSelfToChild(this, parentPoint); + + return parentPoint; +} + +#if !PLATFORM(EFL) +void Widget::frameRectsChanged() +{ +} +#endif + +} // namespace WebCore -- cgit v1.1