mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Remove TouchDisambiguation and WindowFocusAllowedIndicator
TouchDisambiguation is dead code. WindowFocusAllowedIndicator doesn't make any sense because you're always allowed to focus. R=eseidel@chromium.org Review URL: https://codereview.chromium.org/866283003
This commit is contained in:
parent
9612dcf25f
commit
3d511d7612
@ -1047,10 +1047,6 @@ sky_core_files = [
|
||||
"page/PageVisibilityState.cpp",
|
||||
"page/PageVisibilityState.h",
|
||||
"page/SpellCheckerClient.h",
|
||||
"page/TouchDisambiguation.cpp",
|
||||
"page/TouchDisambiguation.h",
|
||||
"page/WindowFocusAllowedIndicator.cpp",
|
||||
"page/WindowFocusAllowedIndicator.h",
|
||||
"rendering/BidiRun.h",
|
||||
"rendering/BidiRunForLine.cpp",
|
||||
"rendering/BidiRunForLine.h",
|
||||
|
||||
@ -73,7 +73,6 @@
|
||||
#include "sky/engine/core/page/ChromeClient.h"
|
||||
#include "sky/engine/core/page/EventHandler.h"
|
||||
#include "sky/engine/core/page/Page.h"
|
||||
#include "sky/engine/core/page/WindowFocusAllowedIndicator.h"
|
||||
#include "sky/engine/core/rendering/style/RenderStyle.h"
|
||||
#include "sky/engine/platform/EventDispatchForbiddenScope.h"
|
||||
#include "sky/engine/platform/PlatformScreen.h"
|
||||
@ -474,11 +473,7 @@ void LocalDOMWindow::focus(ExecutionContext* context)
|
||||
if (!host)
|
||||
return;
|
||||
|
||||
bool allowFocus = WindowFocusAllowedIndicator::windowFocusAllowed();
|
||||
|
||||
// If we're a top level window, bring the window to the front.
|
||||
if (allowFocus)
|
||||
host->chrome().focus();
|
||||
host->chrome().focus();
|
||||
|
||||
if (!m_frame)
|
||||
return;
|
||||
|
||||
@ -1,147 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Google 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:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * 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.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "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 THE COPYRIGHT
|
||||
* OWNER 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 "sky/engine/config.h"
|
||||
|
||||
#include "sky/engine/core/page/TouchDisambiguation.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include "sky/engine/core/dom/Document.h"
|
||||
#include "sky/engine/core/dom/Element.h"
|
||||
#include "sky/engine/core/dom/NodeTraversal.h"
|
||||
#include "sky/engine/core/frame/FrameView.h"
|
||||
#include "sky/engine/core/frame/LocalFrame.h"
|
||||
#include "sky/engine/core/page/EventHandler.h"
|
||||
#include "sky/engine/core/rendering/HitTestResult.h"
|
||||
#include "sky/engine/core/rendering/RenderBlock.h"
|
||||
|
||||
namespace blink {
|
||||
|
||||
static IntRect boundingBoxForEventNodes(Node* eventNode)
|
||||
{
|
||||
if (!eventNode->document().view())
|
||||
return IntRect();
|
||||
|
||||
IntRect result;
|
||||
Node* node = eventNode;
|
||||
while (node) {
|
||||
// Skip the whole sub-tree if the node doesn't propagate events.
|
||||
if (node != eventNode && node->willRespondToMouseClickEvents()) {
|
||||
node = NodeTraversal::nextSkippingChildren(*node, eventNode);
|
||||
continue;
|
||||
}
|
||||
result.unite(node->pixelSnappedBoundingBox());
|
||||
node = NodeTraversal::next(*node, eventNode);
|
||||
}
|
||||
return eventNode->document().view()->contentsToWindow(result);
|
||||
}
|
||||
|
||||
static float scoreTouchTarget(IntPoint touchPoint, int padding, IntRect boundingBox)
|
||||
{
|
||||
if (boundingBox.isEmpty())
|
||||
return 0;
|
||||
|
||||
float reciprocalPadding = 1.f / padding;
|
||||
float score = 1;
|
||||
|
||||
IntSize distance = boundingBox.differenceToPoint(touchPoint);
|
||||
score *= std::max((padding - abs(distance.width())) * reciprocalPadding, 0.f);
|
||||
score *= std::max((padding - abs(distance.height())) * reciprocalPadding, 0.f);
|
||||
|
||||
return score;
|
||||
}
|
||||
|
||||
struct TouchTargetData {
|
||||
IntRect windowBoundingBox;
|
||||
float score;
|
||||
};
|
||||
|
||||
void findGoodTouchTargets(const IntRect& touchBox, LocalFrame* mainFrame, Vector<IntRect>& goodTargets, Vector<RawPtr<Node> >& highlightNodes)
|
||||
{
|
||||
goodTargets.clear();
|
||||
|
||||
int touchPointPadding = ceil(std::max(touchBox.width(), touchBox.height()) * 0.5);
|
||||
|
||||
IntPoint touchPoint = touchBox.center();
|
||||
IntPoint contentsPoint = mainFrame->view()->windowToContents(touchPoint);
|
||||
|
||||
HitTestResult result = mainFrame->eventHandler().hitTestResultAtPoint(contentsPoint, HitTestRequest::ReadOnly | HitTestRequest::Active, IntSize(touchPointPadding, touchPointPadding));
|
||||
const ListHashSet<RefPtr<Node> >& hitResults = result.rectBasedTestResult();
|
||||
|
||||
// Blacklist nodes that are container of disambiguated nodes.
|
||||
// It is not uncommon to have a clickable <div> that contains other clickable objects.
|
||||
// This heuristic avoids excessive disambiguation in that case.
|
||||
HashSet<RawPtr<Node> > blackList;
|
||||
for (ListHashSet<RefPtr<Node> >::const_iterator it = hitResults.begin(); it != hitResults.end(); ++it) {
|
||||
// Ignore any Nodes that can't be clicked on.
|
||||
RenderObject* renderer = it->get()->renderer();
|
||||
if (!renderer || !it->get()->willRespondToMouseClickEvents())
|
||||
continue;
|
||||
|
||||
// Blacklist all of the Node's containers.
|
||||
for (RenderBlock* container = renderer->containingBlock(); container; container = container->containingBlock()) {
|
||||
Node* containerNode = container->node();
|
||||
if (!containerNode)
|
||||
continue;
|
||||
if (!blackList.add(containerNode).isNewEntry)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
HashMap<RawPtr<Node>, TouchTargetData> touchTargets;
|
||||
float bestScore = 0;
|
||||
for (ListHashSet<RefPtr<Node> >::const_iterator it = hitResults.begin(); it != hitResults.end(); ++it) {
|
||||
for (Node* node = it->get(); node; node = node->parentNode()) {
|
||||
if (blackList.contains(node))
|
||||
continue;
|
||||
if (node->isDocumentNode())
|
||||
break;
|
||||
if (node->willRespondToMouseClickEvents()) {
|
||||
TouchTargetData& targetData = touchTargets.add(node, TouchTargetData()).storedValue->value;
|
||||
targetData.windowBoundingBox = boundingBoxForEventNodes(node);
|
||||
targetData.score = scoreTouchTarget(touchPoint, touchPointPadding, targetData.windowBoundingBox);
|
||||
bestScore = std::max(bestScore, targetData.score);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (HashMap<RawPtr<Node>, TouchTargetData>::iterator it = touchTargets.begin(); it != touchTargets.end(); ++it) {
|
||||
// Currently the scoring function uses the overlap area with the fat point as the score.
|
||||
// We ignore the candidates that has less than 1/2 overlap (we consider not really ambiguous enough) than the best candidate to avoid excessive popups.
|
||||
if (it->value.score < bestScore * 0.5)
|
||||
continue;
|
||||
goodTargets.append(it->value.windowBoundingBox);
|
||||
highlightNodes.append(it->key);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace blink
|
||||
@ -1,47 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Google 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:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * 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.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "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 THE COPYRIGHT
|
||||
* OWNER 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.
|
||||
*/
|
||||
|
||||
#ifndef SKY_ENGINE_CORE_PAGE_TOUCHDISAMBIGUATION_H_
|
||||
#define SKY_ENGINE_CORE_PAGE_TOUCHDISAMBIGUATION_H_
|
||||
|
||||
#include "sky/engine/platform/heap/Handle.h"
|
||||
#include "sky/engine/wtf/Vector.h"
|
||||
|
||||
namespace blink {
|
||||
|
||||
class LocalFrame;
|
||||
class IntRect;
|
||||
class Node;
|
||||
|
||||
void findGoodTouchTargets(const IntRect& touchBox, LocalFrame* mainFrame, Vector<IntRect>& goodTargets, Vector<RawPtr<Node> >& highlightNodes);
|
||||
|
||||
} // namespace blink
|
||||
|
||||
#endif // SKY_ENGINE_CORE_PAGE_TOUCHDISAMBIGUATION_H_
|
||||
@ -1,49 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Google, 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 GOOGLE 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 "sky/engine/config.h"
|
||||
#include "sky/engine/core/page/WindowFocusAllowedIndicator.h"
|
||||
|
||||
namespace blink {
|
||||
|
||||
static bool s_windowFocusAllowed = false;
|
||||
|
||||
bool WindowFocusAllowedIndicator::windowFocusAllowed()
|
||||
{
|
||||
return s_windowFocusAllowed;
|
||||
}
|
||||
|
||||
WindowFocusAllowedIndicator::WindowFocusAllowedIndicator()
|
||||
: m_previousWindowFocusAllowed(s_windowFocusAllowed)
|
||||
{
|
||||
s_windowFocusAllowed = true;
|
||||
}
|
||||
|
||||
WindowFocusAllowedIndicator::~WindowFocusAllowedIndicator()
|
||||
{
|
||||
s_windowFocusAllowed = m_previousWindowFocusAllowed;
|
||||
}
|
||||
|
||||
} // namespace blink
|
||||
@ -1,47 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2012 Google, 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 GOOGLE 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.
|
||||
*/
|
||||
|
||||
#ifndef SKY_ENGINE_CORE_PAGE_WINDOWFOCUSALLOWEDINDICATOR_H_
|
||||
#define SKY_ENGINE_CORE_PAGE_WINDOWFOCUSALLOWEDINDICATOR_H_
|
||||
|
||||
#include "sky/engine/wtf/Noncopyable.h"
|
||||
|
||||
namespace blink {
|
||||
|
||||
class WindowFocusAllowedIndicator {
|
||||
WTF_MAKE_NONCOPYABLE(WindowFocusAllowedIndicator);
|
||||
public:
|
||||
WindowFocusAllowedIndicator();
|
||||
~WindowFocusAllowedIndicator();
|
||||
|
||||
static bool windowFocusAllowed();
|
||||
|
||||
private:
|
||||
bool m_previousWindowFocusAllowed;
|
||||
};
|
||||
|
||||
} // namespace blink
|
||||
|
||||
#endif // SKY_ENGINE_CORE_PAGE_WINDOWFOCUSALLOWEDINDICATOR_H_
|
||||
@ -59,7 +59,6 @@
|
||||
#include "sky/engine/core/page/EventWithHitTestResults.h"
|
||||
#include "sky/engine/core/page/FocusController.h"
|
||||
#include "sky/engine/core/page/Page.h"
|
||||
#include "sky/engine/core/page/TouchDisambiguation.h"
|
||||
#include "sky/engine/core/rendering/RenderView.h"
|
||||
#include "sky/engine/platform/Cursor.h"
|
||||
#include "sky/engine/platform/KeyboardCodes.h"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user