| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) Research In Motion Limited 2010-2012. All rights reserved. | 2 * Copyright (C) Research In Motion Limited 2010-2012. All rights reserved. |
| 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 20 matching lines...) Expand all Loading... |
| 31 #include "wtf/MathExtras.h" | 31 #include "wtf/MathExtras.h" |
| 32 #include "wtf/Vector.h" | 32 #include "wtf/Vector.h" |
| 33 | 33 |
| 34 namespace blink { | 34 namespace blink { |
| 35 | 35 |
| 36 // Base structure for callback user data | 36 // Base structure for callback user data |
| 37 struct QueryData { | 37 struct QueryData { |
| 38 QueryData() | 38 QueryData() |
| 39 : isVerticalText(false) | 39 : isVerticalText(false) |
| 40 , currentOffset(0) | 40 , currentOffset(0) |
| 41 , textLayoutObject(0) | 41 , textLayoutObject(nullptr) |
| 42 , textBox(0) | 42 , textBox(nullptr) |
| 43 { | 43 { |
| 44 } | 44 } |
| 45 | 45 |
| 46 bool isVerticalText; | 46 bool isVerticalText; |
| 47 unsigned currentOffset; | 47 unsigned currentOffset; |
| 48 LayoutSVGInlineText* textLayoutObject; | 48 LayoutSVGInlineText* textLayoutObject; |
| 49 const SVGInlineTextBox* textBox; | 49 const SVGInlineTextBox* textBox; |
| 50 }; | 50 }; |
| 51 | 51 |
| 52 static inline InlineFlowBox* flowBoxForLayoutObject(LayoutObject* layoutObject) | 52 static inline InlineFlowBox* flowBoxForLayoutObject(LayoutObject* layoutObject) |
| 53 { | 53 { |
| 54 if (!layoutObject) | 54 if (!layoutObject) |
| 55 return 0; | 55 return nullptr; |
| 56 | 56 |
| 57 if (layoutObject->isLayoutBlock()) { | 57 if (layoutObject->isLayoutBlock()) { |
| 58 // If we're given a block element, it has to be a LayoutSVGText. | 58 // If we're given a block element, it has to be a LayoutSVGText. |
| 59 ASSERT(layoutObject->isSVGText()); | 59 ASSERT(layoutObject->isSVGText()); |
| 60 LayoutBlockFlow* layoutBlockFlow = toLayoutBlockFlow(layoutObject); | 60 LayoutBlockFlow* layoutBlockFlow = toLayoutBlockFlow(layoutObject); |
| 61 | 61 |
| 62 // LayoutSVGText only ever contains a single line box. | 62 // LayoutSVGText only ever contains a single line box. |
| 63 InlineFlowBox* flowBox = layoutBlockFlow->firstLineBox(); | 63 InlineFlowBox* flowBox = layoutBlockFlow->firstLineBox(); |
| 64 ASSERT(flowBox == layoutBlockFlow->lastLineBox()); | 64 ASSERT(flowBox == layoutBlockFlow->lastLineBox()); |
| 65 return flowBox; | 65 return flowBox; |
| 66 } | 66 } |
| 67 | 67 |
| 68 if (layoutObject->isLayoutInline()) { | 68 if (layoutObject->isLayoutInline()) { |
| 69 // We're given a LayoutSVGInline or objects that derive from it (LayoutS
VGTSpan / LayoutSVGTextPath) | 69 // We're given a LayoutSVGInline or objects that derive from it (LayoutS
VGTSpan / LayoutSVGTextPath) |
| 70 LayoutInline* layoutInline = toLayoutInline(layoutObject); | 70 LayoutInline* layoutInline = toLayoutInline(layoutObject); |
| 71 | 71 |
| 72 // LayoutSVGInline only ever contains a single line box. | 72 // LayoutSVGInline only ever contains a single line box. |
| 73 InlineFlowBox* flowBox = layoutInline->firstLineBox(); | 73 InlineFlowBox* flowBox = layoutInline->firstLineBox(); |
| 74 ASSERT(flowBox == layoutInline->lastLineBox()); | 74 ASSERT(flowBox == layoutInline->lastLineBox()); |
| 75 return flowBox; | 75 return flowBox; |
| 76 } | 76 } |
| 77 | 77 |
| 78 ASSERT_NOT_REACHED(); | 78 ASSERT_NOT_REACHED(); |
| 79 return 0; | 79 return nullptr; |
| 80 } | 80 } |
| 81 | 81 |
| 82 static void collectTextBoxesInFlowBox(InlineFlowBox* flowBox, Vector<SVGInlineTe
xtBox*>& textBoxes) | 82 static void collectTextBoxesInFlowBox(InlineFlowBox* flowBox, Vector<SVGInlineTe
xtBox*>& textBoxes) |
| 83 { | 83 { |
| 84 if (!flowBox) | 84 if (!flowBox) |
| 85 return; | 85 return; |
| 86 | 86 |
| 87 for (InlineBox* child = flowBox->firstChild(); child; child = child->nextOnL
ine()) { | 87 for (InlineBox* child = flowBox->firstChild(); child; child = child->nextOnL
ine()) { |
| 88 if (child->isInlineFlowBox()) { | 88 if (child->isInlineFlowBox()) { |
| 89 // Skip generated content. | 89 // Skip generated content. |
| (...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 } | 608 } |
| 609 | 609 |
| 610 int SVGTextQuery::characterNumberAtPosition(const FloatPoint& position) const | 610 int SVGTextQuery::characterNumberAtPosition(const FloatPoint& position) const |
| 611 { | 611 { |
| 612 CharacterNumberAtPositionData data(position); | 612 CharacterNumberAtPositionData data(position); |
| 613 spatialQuery(m_queryRootLayoutObject, &data, characterNumberAtPositionCallba
ck); | 613 spatialQuery(m_queryRootLayoutObject, &data, characterNumberAtPositionCallba
ck); |
| 614 return data.characterNumberWithin(m_queryRootLayoutObject); | 614 return data.characterNumberWithin(m_queryRootLayoutObject); |
| 615 } | 615 } |
| 616 | 616 |
| 617 } | 617 } |
| OLD | NEW |