Commit 84b9d943 authored by yosin@chromium.org's avatar yosin@chromium.org

Move hasRenderedNonAnonymousDescendantsWithHeight() to VisibleUnits.cpp from Position.cpp

This patch moves |hasRenderedNonAnonymousDescendantsWithHeight()| form
"Position.cpp" to "VisibleUnits.cpp" to reduce |InlineBox| dependency in
"Position.cpp" for improving code health, since |hasRender...()| is independent
from an implementation of |PositionAlgorithm| template class.

BUG=518738
TEST=n/a; no behavior changes

Review URL: https://codereview.chromium.org/1288873009

git-svn-id: svn://svn.chromium.org/blink/trunk@200896 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 5c29462c
......@@ -42,7 +42,6 @@
#include "core/layout/LayoutBlock.h"
#include "core/layout/LayoutInline.h"
#include "core/layout/LayoutText.h"
#include "core/layout/line/InlineIterator.h"
#include "core/layout/line/InlineTextBox.h"
#include "wtf/text/CString.h"
#include <stdio.h>
......@@ -528,27 +527,6 @@ PositionAlgorithm<Strategy> PositionAlgorithm<Strategy>::downstream(EditingBound
return mostBackwardCaretPosition(*this, rule);
}
static int boundingBoxLogicalHeight(LayoutObject *o, const IntRect &rect)
{
return o->style()->isHorizontalWritingMode() ? rect.height() : rect.width();
}
// TODO(yosin) We should move |hasRenderedNonAnonymousDescendantsWithHeight|
// to "VisibleUnits.cpp" to reduce |LayoutObject| dependency in "Position.cpp"
bool hasRenderedNonAnonymousDescendantsWithHeight(LayoutObject* layoutObject)
{
LayoutObject* stop = layoutObject->nextInPreOrderAfterChildren();
for (LayoutObject *o = layoutObject->slowFirstChild(); o && o != stop; o = o->nextInPreOrder()) {
if (o->nonPseudoNode()) {
if ((o->isText() && boundingBoxLogicalHeight(o, toLayoutText(o)->linesBoundingBox()))
|| (o->isBox() && toLayoutBox(o)->pixelSnappedLogicalHeight())
|| (o->isLayoutInline() && isEmptyInline(LineLayoutItem(o)) && boundingBoxLogicalHeight(o, toLayoutInline(o)->linesBoundingBox())))
return true;
}
}
return false;
}
template <typename Strategy>
Node* PositionAlgorithm<Strategy>::rootUserSelectAllForNode(Node* node)
{
......
......@@ -434,10 +434,6 @@ inline PositionInComposedTree fromPositionInDOMTree<EditingInComposedTreeStrateg
return toPositionInComposedTree(position);
}
// TODO(yosin) We should move |hasRenderedNonAnonymousDescendantsWithHeight|
// to "VisibleUnits.cpp" to reduce |LayoutObject| dependency in "Position.cpp"
bool hasRenderedNonAnonymousDescendantsWithHeight(LayoutObject*);
// TODO(yosin) We should move |inRenderedText()| to "VisibleUnits.h" for
// reduce dependency of |LayoutObject| in |Position| class.
CORE_EXPORT bool inRenderedText(const Position&);
......
......@@ -48,8 +48,10 @@
#include "core/layout/HitTestRequest.h"
#include "core/layout/HitTestResult.h"
#include "core/layout/LayoutBlockFlow.h"
#include "core/layout/LayoutInline.h"
#include "core/layout/LayoutObject.h"
#include "core/layout/LayoutView.h"
#include "core/layout/line/InlineIterator.h"
#include "core/layout/line/InlineTextBox.h"
#include "core/paint/DeprecatedPaintLayer.h"
#include "platform/Logging.h"
......@@ -1450,6 +1452,25 @@ LayoutRect localCaretRectOfPosition(const PositionWithAffinity& position, Layout
return layoutObject->localCaretRect(boxPosition.inlineBox, boxPosition.offsetInBox);
}
static int boundingBoxLogicalHeight(LayoutObject *o, const IntRect &rect)
{
return o->style()->isHorizontalWritingMode() ? rect.height() : rect.width();
}
bool hasRenderedNonAnonymousDescendantsWithHeight(LayoutObject* layoutObject)
{
LayoutObject* stop = layoutObject->nextInPreOrderAfterChildren();
for (LayoutObject *o = layoutObject->slowFirstChild(); o && o != stop; o = o->nextInPreOrder()) {
if (o->nonPseudoNode()) {
if ((o->isText() && boundingBoxLogicalHeight(o, toLayoutText(o)->linesBoundingBox()))
|| (o->isBox() && toLayoutBox(o)->pixelSnappedLogicalHeight())
|| (o->isLayoutInline() && isEmptyInline(LineLayoutItem(o)) && boundingBoxLogicalHeight(o, toLayoutInline(o)->linesBoundingBox())))
return true;
}
}
return false;
}
VisiblePosition visiblePositionForContentsPoint(const IntPoint& contentsPoint, LocalFrame* frame)
{
HitTestRequest request = HitTestRequest::Move | HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::IgnoreClipping;
......
......@@ -128,6 +128,7 @@ bool isEndOfEditableOrNonEditableContent(const VisiblePosition&);
// Rect is local to the returned layoutObject
LayoutRect localCaretRectOfPosition(const PositionWithAffinity&, LayoutObject*&);
bool hasRenderedNonAnonymousDescendantsWithHeight(LayoutObject*);
// Returns a hit-tested VisiblePosition for the given point in contents-space
// coordinates.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment