| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) | 2 * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) |
| 3 * | 3 * |
| 4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
| 5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
| 6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
| 7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
| 8 * | 8 * |
| 9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 return true; | 99 return true; |
| 100 } | 100 } |
| 101 return false; | 101 return false; |
| 102 } | 102 } |
| 103 | 103 |
| 104 bool nodeIsZoomTarget(Node* node) | 104 bool nodeIsZoomTarget(Node* node) |
| 105 { | 105 { |
| 106 if (node->isTextNode() || node->isShadowRoot()) | 106 if (node->isTextNode() || node->isShadowRoot()) |
| 107 return false; | 107 return false; |
| 108 | 108 |
| 109 ASSERT(node->renderer()); | 109 ASSERT(node->layoutObject()); |
| 110 return node->renderer()->isBox(); | 110 return node->layoutObject()->isBox(); |
| 111 } | 111 } |
| 112 | 112 |
| 113 bool providesContextMenuItems(Node* node) | 113 bool providesContextMenuItems(Node* node) |
| 114 { | 114 { |
| 115 // This function tries to match the nodes that receive special context-menu
items in | 115 // This function tries to match the nodes that receive special context-menu
items in |
| 116 // ContextMenuController::populate(), and should be kept uptodate with those
. | 116 // ContextMenuController::populate(), and should be kept uptodate with those
. |
| 117 ASSERT(node->renderer() || node->isShadowRoot()); | 117 ASSERT(node->layoutObject() || node->isShadowRoot()); |
| 118 if (!node->renderer()) | 118 if (!node->layoutObject()) |
| 119 return false; | 119 return false; |
| 120 if (node->isContentEditable()) | 120 if (node->isContentEditable()) |
| 121 return true; | 121 return true; |
| 122 if (node->isLink()) | 122 if (node->isLink()) |
| 123 return true; | 123 return true; |
| 124 if (node->renderer()->isImage()) | 124 if (node->layoutObject()->isImage()) |
| 125 return true; | 125 return true; |
| 126 if (node->renderer()->isMedia()) | 126 if (node->layoutObject()->isMedia()) |
| 127 return true; | 127 return true; |
| 128 if (node->renderer()->canBeSelectionLeaf()) { | 128 if (node->layoutObject()->canBeSelectionLeaf()) { |
| 129 // If the context menu gesture will trigger a selection all selectable n
odes are valid targets. | 129 // If the context menu gesture will trigger a selection all selectable n
odes are valid targets. |
| 130 if (node->renderer()->frame()->editor().behavior().shouldSelectOnContext
ualMenuClick()) | 130 if (node->layoutObject()->frame()->editor().behavior().shouldSelectOnCon
textualMenuClick()) |
| 131 return true; | 131 return true; |
| 132 // Only the selected part of the renderer is a valid target, but this wi
ll be corrected in | 132 // Only the selected part of the renderer is a valid target, but this wi
ll be corrected in |
| 133 // appendContextSubtargetsForNode. | 133 // appendContextSubtargetsForNode. |
| 134 if (node->renderer()->selectionState() != LayoutObject::SelectionNone) | 134 if (node->layoutObject()->selectionState() != LayoutObject::SelectionNon
e) |
| 135 return true; | 135 return true; |
| 136 } | 136 } |
| 137 return false; | 137 return false; |
| 138 } | 138 } |
| 139 | 139 |
| 140 static inline void appendQuadsToSubtargetList(Vector<FloatQuad>& quads, Node* no
de, SubtargetGeometryList& subtargets) | 140 static inline void appendQuadsToSubtargetList(Vector<FloatQuad>& quads, Node* no
de, SubtargetGeometryList& subtargets) |
| 141 { | 141 { |
| 142 Vector<FloatQuad>::const_iterator it = quads.begin(); | 142 Vector<FloatQuad>::const_iterator it = quads.begin(); |
| 143 const Vector<FloatQuad>::const_iterator end = quads.end(); | 143 const Vector<FloatQuad>::const_iterator end = quads.end(); |
| 144 for (; it != end; ++it) | 144 for (; it != end; ++it) |
| 145 subtargets.append(SubtargetGeometry(node, *it)); | 145 subtargets.append(SubtargetGeometry(node, *it)); |
| 146 } | 146 } |
| 147 | 147 |
| 148 static inline void appendBasicSubtargetsForNode(Node* node, SubtargetGeometryLis
t& subtargets) | 148 static inline void appendBasicSubtargetsForNode(Node* node, SubtargetGeometryLis
t& subtargets) |
| 149 { | 149 { |
| 150 // Node guaranteed to have renderer due to check in node filter. | 150 // Node guaranteed to have renderer due to check in node filter. |
| 151 ASSERT(node->renderer()); | 151 ASSERT(node->layoutObject()); |
| 152 | 152 |
| 153 Vector<FloatQuad> quads; | 153 Vector<FloatQuad> quads; |
| 154 node->renderer()->absoluteQuads(quads); | 154 node->layoutObject()->absoluteQuads(quads); |
| 155 | 155 |
| 156 appendQuadsToSubtargetList(quads, node, subtargets); | 156 appendQuadsToSubtargetList(quads, node, subtargets); |
| 157 } | 157 } |
| 158 | 158 |
| 159 static inline void appendContextSubtargetsForNode(Node* node, SubtargetGeometryL
ist& subtargets) | 159 static inline void appendContextSubtargetsForNode(Node* node, SubtargetGeometryL
ist& subtargets) |
| 160 { | 160 { |
| 161 // This is a variant of appendBasicSubtargetsForNode that adds special subta
rgets for | 161 // This is a variant of appendBasicSubtargetsForNode that adds special subta
rgets for |
| 162 // selected or auto-selectable parts of text nodes. | 162 // selected or auto-selectable parts of text nodes. |
| 163 ASSERT(node->renderer()); | 163 ASSERT(node->layoutObject()); |
| 164 | 164 |
| 165 if (!node->isTextNode()) | 165 if (!node->isTextNode()) |
| 166 return appendBasicSubtargetsForNode(node, subtargets); | 166 return appendBasicSubtargetsForNode(node, subtargets); |
| 167 | 167 |
| 168 Text* textNode = toText(node); | 168 Text* textNode = toText(node); |
| 169 LayoutText* textRenderer = textNode->renderer(); | 169 LayoutText* textRenderer = textNode->layoutObject(); |
| 170 | 170 |
| 171 if (textRenderer->frame()->editor().behavior().shouldSelectOnContextualMenuC
lick()) { | 171 if (textRenderer->frame()->editor().behavior().shouldSelectOnContextualMenuC
lick()) { |
| 172 // Make subtargets out of every word. | 172 // Make subtargets out of every word. |
| 173 String textValue = textNode->data(); | 173 String textValue = textNode->data(); |
| 174 TextBreakIterator* wordIterator = wordBreakIterator(textValue, 0, textVa
lue.length()); | 174 TextBreakIterator* wordIterator = wordBreakIterator(textValue, 0, textVa
lue.length()); |
| 175 int lastOffset = wordIterator->first(); | 175 int lastOffset = wordIterator->first(); |
| 176 if (lastOffset == -1) | 176 if (lastOffset == -1) |
| 177 return; | 177 return; |
| 178 int offset; | 178 int offset; |
| 179 while ((offset = wordIterator->next()) != -1) { | 179 while ((offset = wordIterator->next()) != -1) { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 210 return; | 210 return; |
| 211 } | 211 } |
| 212 Vector<FloatQuad> quads; | 212 Vector<FloatQuad> quads; |
| 213 textRenderer->absoluteQuadsForRange(quads, startPos, endPos); | 213 textRenderer->absoluteQuadsForRange(quads, startPos, endPos); |
| 214 appendQuadsToSubtargetList(quads, textNode, subtargets); | 214 appendQuadsToSubtargetList(quads, textNode, subtargets); |
| 215 } | 215 } |
| 216 } | 216 } |
| 217 | 217 |
| 218 static inline void appendZoomableSubtargets(Node* node, SubtargetGeometryList& s
ubtargets) | 218 static inline void appendZoomableSubtargets(Node* node, SubtargetGeometryList& s
ubtargets) |
| 219 { | 219 { |
| 220 LayoutBox* renderer = toLayoutBox(node->renderer()); | 220 LayoutBox* renderer = toLayoutBox(node->layoutObject()); |
| 221 ASSERT(renderer); | 221 ASSERT(renderer); |
| 222 | 222 |
| 223 Vector<FloatQuad> quads; | 223 Vector<FloatQuad> quads; |
| 224 FloatRect borderBoxRect = renderer->borderBoxRect(); | 224 FloatRect borderBoxRect = renderer->borderBoxRect(); |
| 225 FloatRect contentBoxRect = renderer->contentBoxRect(); | 225 FloatRect contentBoxRect = renderer->contentBoxRect(); |
| 226 quads.append(renderer->localToAbsoluteQuad(borderBoxRect)); | 226 quads.append(renderer->localToAbsoluteQuad(borderBoxRect)); |
| 227 if (borderBoxRect != contentBoxRect) | 227 if (borderBoxRect != contentBoxRect) |
| 228 quads.append(renderer->localToAbsoluteQuad(contentBoxRect)); | 228 quads.append(renderer->localToAbsoluteQuad(contentBoxRect)); |
| 229 // FIXME: For LayoutBlocks, add column boxes and content boxes cleared for f
loats. | 229 // FIXME: For LayoutBlocks, add column boxes and content boxes cleared for f
loats. |
| 230 | 230 |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 | 507 |
| 508 bool findBestZoomableArea(Node*& targetNode, IntRect& targetArea, const IntPoint
& touchHotspot, const IntRect& touchArea, const WillBeHeapVector<RefPtrWillBeMem
ber<Node>>& nodes) | 508 bool findBestZoomableArea(Node*& targetNode, IntRect& targetArea, const IntPoint
& touchHotspot, const IntRect& touchArea, const WillBeHeapVector<RefPtrWillBeMem
ber<Node>>& nodes) |
| 509 { | 509 { |
| 510 IntPoint targetPoint; | 510 IntPoint targetPoint; |
| 511 TouchAdjustment::SubtargetGeometryList subtargets; | 511 TouchAdjustment::SubtargetGeometryList subtargets; |
| 512 TouchAdjustment::compileZoomableSubtargets(nodes, subtargets); | 512 TouchAdjustment::compileZoomableSubtargets(nodes, subtargets); |
| 513 return TouchAdjustment::findNodeWithLowestDistanceMetric(targetNode, targetP
oint, targetArea, touchHotspot, touchArea, subtargets, TouchAdjustment::zoomable
IntersectionQuotient); | 513 return TouchAdjustment::findNodeWithLowestDistanceMetric(targetNode, targetP
oint, targetArea, touchHotspot, touchArea, subtargets, TouchAdjustment::zoomable
IntersectionQuotient); |
| 514 } | 514 } |
| 515 | 515 |
| 516 } // namespace blink | 516 } // namespace blink |
| OLD | NEW |