OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2008, 2011 Apple Inc. All rights reserved. |
3 * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 29 matching lines...) Expand all Loading... |
40 #include "core/layout/LayoutTextFragment.h" | 40 #include "core/layout/LayoutTextFragment.h" |
41 #include "core/page/FrameTree.h" | 41 #include "core/page/FrameTree.h" |
42 #include "core/svg/SVGElement.h" | 42 #include "core/svg/SVGElement.h" |
43 #include "platform/scroll/Scrollbar.h" | 43 #include "platform/scroll/Scrollbar.h" |
44 | 44 |
45 namespace blink { | 45 namespace blink { |
46 | 46 |
47 using namespace HTMLNames; | 47 using namespace HTMLNames; |
48 | 48 |
49 HitTestResult::HitTestResult() | 49 HitTestResult::HitTestResult() |
50 : m_isOverWidget(false) | 50 : m_hitTestRequest(HitTestRequest::ReadOnly | HitTestRequest::Active) |
| 51 , m_isOverWidget(false) |
51 { | 52 { |
52 } | 53 } |
53 | 54 |
54 HitTestResult::HitTestResult(const LayoutPoint& point) | 55 HitTestResult::HitTestResult(const HitTestRequest& request, const LayoutPoint& p
oint) |
55 : m_hitTestLocation(point) | 56 : m_hitTestLocation(point) |
| 57 , m_hitTestRequest(request) |
56 , m_pointInInnerNodeFrame(point) | 58 , m_pointInInnerNodeFrame(point) |
57 , m_isOverWidget(false) | 59 , m_isOverWidget(false) |
58 { | 60 { |
59 } | 61 } |
60 | 62 |
61 HitTestResult::HitTestResult(const LayoutPoint& centerPoint, unsigned topPadding
, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding) | 63 HitTestResult::HitTestResult(const HitTestRequest& request, const LayoutPoint& c
enterPoint, unsigned topPadding, unsigned rightPadding, unsigned bottomPadding,
unsigned leftPadding) |
62 : m_hitTestLocation(centerPoint, topPadding, rightPadding, bottomPadding, le
ftPadding) | 64 : m_hitTestLocation(centerPoint, topPadding, rightPadding, bottomPadding, le
ftPadding) |
| 65 , m_hitTestRequest(request) |
63 , m_pointInInnerNodeFrame(centerPoint) | 66 , m_pointInInnerNodeFrame(centerPoint) |
64 , m_isOverWidget(false) | 67 , m_isOverWidget(false) |
65 { | 68 { |
66 } | 69 } |
67 | 70 |
68 HitTestResult::HitTestResult(const HitTestLocation& other) | 71 HitTestResult::HitTestResult(const HitTestRequest& otherRequest, const HitTestLo
cation& other) |
69 : m_hitTestLocation(other) | 72 : m_hitTestLocation(other) |
| 73 , m_hitTestRequest(otherRequest) |
70 , m_pointInInnerNodeFrame(m_hitTestLocation.point()) | 74 , m_pointInInnerNodeFrame(m_hitTestLocation.point()) |
71 , m_isOverWidget(false) | 75 , m_isOverWidget(false) |
72 { | 76 { |
73 } | 77 } |
74 | 78 |
75 HitTestResult::HitTestResult(const HitTestResult& other) | 79 HitTestResult::HitTestResult(const HitTestResult& other) |
76 : m_hitTestLocation(other.m_hitTestLocation) | 80 : m_hitTestLocation(other.m_hitTestLocation) |
| 81 , m_hitTestRequest(other.m_hitTestRequest) |
77 , m_innerNode(other.innerNode()) | 82 , m_innerNode(other.innerNode()) |
78 , m_innerPossiblyPseudoNode(other.m_innerPossiblyPseudoNode) | 83 , m_innerPossiblyPseudoNode(other.m_innerPossiblyPseudoNode) |
79 , m_innerNonSharedNode(other.innerNonSharedNode()) | 84 , m_innerNonSharedNode(other.innerNonSharedNode()) |
80 , m_pointInInnerNodeFrame(other.m_pointInInnerNodeFrame) | 85 , m_pointInInnerNodeFrame(other.m_pointInInnerNodeFrame) |
81 , m_localPoint(other.localPoint()) | 86 , m_localPoint(other.localPoint()) |
82 , m_innerURLElement(other.URLElement()) | 87 , m_innerURLElement(other.URLElement()) |
83 , m_scrollbar(other.scrollbar()) | 88 , m_scrollbar(other.scrollbar()) |
84 , m_isOverWidget(other.isOverWidget()) | 89 , m_isOverWidget(other.isOverWidget()) |
85 { | 90 { |
86 // Only copy the NodeSet in case of list hit test. | 91 // Only copy the NodeSet in case of list hit test. |
87 m_listBasedTestResult = adoptPtrWillBeNoop(other.m_listBasedTestResult ? new
NodeSet(*other.m_listBasedTestResult) : 0); | 92 m_listBasedTestResult = adoptPtrWillBeNoop(other.m_listBasedTestResult ? new
NodeSet(*other.m_listBasedTestResult) : 0); |
88 } | 93 } |
89 | 94 |
90 HitTestResult::~HitTestResult() | 95 HitTestResult::~HitTestResult() |
91 { | 96 { |
92 } | 97 } |
93 | 98 |
94 HitTestResult& HitTestResult::operator=(const HitTestResult& other) | 99 HitTestResult& HitTestResult::operator=(const HitTestResult& other) |
95 { | 100 { |
96 m_hitTestLocation = other.m_hitTestLocation; | 101 m_hitTestLocation = other.m_hitTestLocation; |
| 102 m_hitTestRequest = other.m_hitTestRequest; |
97 m_innerNode = other.innerNode(); | 103 m_innerNode = other.innerNode(); |
98 m_innerPossiblyPseudoNode = other.innerPossiblyPseudoNode(); | 104 m_innerPossiblyPseudoNode = other.innerPossiblyPseudoNode(); |
99 m_innerNonSharedNode = other.innerNonSharedNode(); | 105 m_innerNonSharedNode = other.innerNonSharedNode(); |
100 m_pointInInnerNodeFrame = other.m_pointInInnerNodeFrame; | 106 m_pointInInnerNodeFrame = other.m_pointInInnerNodeFrame; |
101 m_localPoint = other.localPoint(); | 107 m_localPoint = other.localPoint(); |
102 m_innerURLElement = other.URLElement(); | 108 m_innerURLElement = other.URLElement(); |
103 m_scrollbar = other.scrollbar(); | 109 m_scrollbar = other.scrollbar(); |
104 m_isOverWidget = other.isOverWidget(); | 110 m_isOverWidget = other.isOverWidget(); |
105 | 111 |
106 // Only copy the NodeSet in case of list hit test. | 112 // Only copy the NodeSet in case of list hit test. |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 return !toHTMLTextAreaElement(*m_innerNonSharedNode).isDisabledOrReadOnl
y(); | 371 return !toHTMLTextAreaElement(*m_innerNonSharedNode).isDisabledOrReadOnl
y(); |
366 | 372 |
367 if (isHTMLInputElement(*m_innerNonSharedNode)) { | 373 if (isHTMLInputElement(*m_innerNonSharedNode)) { |
368 HTMLInputElement& inputElement = toHTMLInputElement(*m_innerNonSharedNod
e); | 374 HTMLInputElement& inputElement = toHTMLInputElement(*m_innerNonSharedNod
e); |
369 return !inputElement.isDisabledOrReadOnly() && inputElement.isTextField(
); | 375 return !inputElement.isDisabledOrReadOnly() && inputElement.isTextField(
); |
370 } | 376 } |
371 | 377 |
372 return m_innerNonSharedNode->hasEditableStyle(); | 378 return m_innerNonSharedNode->hasEditableStyle(); |
373 } | 379 } |
374 | 380 |
375 bool HitTestResult::addNodeToListBasedTestResult(Node* node, const HitTestReques
t& request, const HitTestLocation& locationInContainer, const LayoutRect& rect) | 381 bool HitTestResult::addNodeToListBasedTestResult(Node* node, const HitTestLocati
on& locationInContainer, const LayoutRect& rect) |
376 { | 382 { |
377 // If not a list-based test, this function should be a no-op. | 383 // If not a list-based test, this function should be a no-op. |
378 if (!request.listBased()) { | 384 if (!hitTestRequest().listBased()) |
379 ASSERT(!isRectBasedTest()); | |
380 return false; | 385 return false; |
381 } | |
382 | 386 |
383 // If node is null, return true so the hit test can continue. | 387 // If node is null, return true so the hit test can continue. |
384 if (!node) | 388 if (!node) |
385 return true; | 389 return true; |
386 | 390 |
387 mutableListBasedTestResult().add(node); | 391 mutableListBasedTestResult().add(node); |
388 | 392 |
389 if (request.penetratingList()) | 393 if (hitTestRequest().penetratingList()) |
390 return true; | 394 return true; |
391 | 395 |
392 bool regionFilled = rect.contains(LayoutRect(locationInContainer.boundingBox
())); | 396 bool regionFilled = rect.contains(LayoutRect(locationInContainer.boundingBox
())); |
393 return !regionFilled; | 397 return !regionFilled; |
394 } | 398 } |
395 | 399 |
396 bool HitTestResult::addNodeToListBasedTestResult(Node* node, const HitTestReques
t& request, const HitTestLocation& locationInContainer, const FloatRect& rect) | 400 bool HitTestResult::addNodeToListBasedTestResult(Node* node, const HitTestLocati
on& locationInContainer, const FloatRect& rect) |
397 { | 401 { |
398 // If not a list-based test, this function should be a no-op. | 402 // If not a list-based test, this function should be a no-op. |
399 if (!request.listBased()) { | 403 if (!hitTestRequest().listBased()) |
400 ASSERT(!isRectBasedTest()); | |
401 return false; | 404 return false; |
402 } | |
403 | 405 |
404 // If node is null, return true so the hit test can continue. | 406 // If node is null, return true so the hit test can continue. |
405 if (!node) | 407 if (!node) |
406 return true; | 408 return true; |
407 | 409 |
408 mutableListBasedTestResult().add(node); | 410 mutableListBasedTestResult().add(node); |
409 | 411 |
410 if (request.penetratingList()) | 412 if (hitTestRequest().penetratingList()) |
411 return true; | 413 return true; |
412 | 414 |
413 bool regionFilled = rect.contains(locationInContainer.boundingBox()); | 415 bool regionFilled = rect.contains(locationInContainer.boundingBox()); |
414 return !regionFilled; | 416 return !regionFilled; |
415 } | 417 } |
416 | 418 |
417 void HitTestResult::append(const HitTestResult& other, const HitTestRequest& req
uest) | 419 void HitTestResult::append(const HitTestResult& other) |
418 { | 420 { |
419 ASSERT(request.listBased()); | 421 ASSERT(hitTestRequest().listBased()); |
420 | 422 |
421 if (!m_scrollbar && other.scrollbar()) { | 423 if (!m_scrollbar && other.scrollbar()) { |
422 setScrollbar(other.scrollbar()); | 424 setScrollbar(other.scrollbar()); |
423 } | 425 } |
424 | 426 |
425 if (!m_innerNode && other.innerNode()) { | 427 if (!m_innerNode && other.innerNode()) { |
426 m_innerNode = other.innerNode(); | 428 m_innerNode = other.innerNode(); |
427 m_innerPossiblyPseudoNode = other.innerPossiblyPseudoNode(); | 429 m_innerPossiblyPseudoNode = other.innerPossiblyPseudoNode(); |
428 m_innerNonSharedNode = other.innerNonSharedNode(); | 430 m_innerNonSharedNode = other.innerNonSharedNode(); |
429 m_localPoint = other.localPoint(); | 431 m_localPoint = other.localPoint(); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 { | 477 { |
476 for (Node* node = m_innerNode.get(); node; node = NodeRenderingTraversal::pa
rent(*node)) { | 478 for (Node* node = m_innerNode.get(); node; node = NodeRenderingTraversal::pa
rent(*node)) { |
477 if (node->isElementNode()) | 479 if (node->isElementNode()) |
478 return toElement(node); | 480 return toElement(node); |
479 } | 481 } |
480 | 482 |
481 return 0; | 483 return 0; |
482 } | 484 } |
483 | 485 |
484 } // namespace blink | 486 } // namespace blink |
OLD | NEW |