diff -r 000000000000 -r 4f2f89ce4247 WebCore/platform/Widget.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebCore/platform/Widget.cpp Fri Sep 17 09:02:29 2010 +0300 @@ -0,0 +1,183 @@ +/* + * Copyright (C) 2004, 2005, 2006 Apple Computer, 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 + +#if !PLATFORM(MAC) && !PLATFORM(GTK) +void Widget::releasePlatformWidget() +{ +} + +void Widget::retainPlatformWidget() +{ +} +#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