OLD | NEW |
1 /** | 1 /** |
2 * Copyright (C) 2007 Rob Buis <buis@kde.org> | 2 * Copyright (C) 2007 Rob Buis <buis@kde.org> |
3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> | 3 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> |
4 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 4 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
11 * This library is distributed in the hope that it will be useful, | 11 * This library is distributed in the hope that it will be useful, |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 * Library General Public License for more details. | 14 * Library General Public License for more details. |
15 * | 15 * |
16 * You should have received a copy of the GNU Library General Public License | 16 * You should have received a copy of the GNU Library General Public License |
17 * along with this library; see the file COPYING.LIB. If not, write to | 17 * along with this library; see the file COPYING.LIB. If not, write to |
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
19 * Boston, MA 02110-1301, USA. | 19 * Boston, MA 02110-1301, USA. |
20 */ | 20 */ |
21 | 21 |
22 #include "core/layout/svg/line/SVGInlineTextBox.h" | 22 #include "core/layout/svg/line/SVGInlineTextBox.h" |
23 | 23 |
24 #include "core/layout/HitTestResult.h" | 24 #include "core/layout/HitTestResult.h" |
25 #include "core/layout/PointerEventsHitRules.h" | 25 #include "core/layout/PointerEventsHitRules.h" |
26 #include "core/layout/api/LineLayoutSVGInlineText.h" | 26 #include "core/layout/api/LineLayoutSVGInlineText.h" |
27 #include "core/layout/svg/LayoutSVGInlineText.h" | 27 #include "core/layout/svg/LayoutSVGInlineText.h" |
28 #include "core/paint/SVGInlineTextBoxPainter.h" | 28 #include "core/paint/SVGInlineTextBoxPainter.h" |
29 #include "platform/FloatConversion.h" | 29 #include "wtf/MathExtras.h" |
30 | 30 |
31 namespace blink { | 31 namespace blink { |
32 | 32 |
33 struct ExpectedSVGInlineTextBoxSize : public InlineTextBox { | 33 struct ExpectedSVGInlineTextBoxSize : public InlineTextBox { |
34 LayoutUnit float1; | 34 LayoutUnit float1; |
35 uint32_t bitfields : 1; | 35 uint32_t bitfields : 1; |
36 Vector<SVGTextFragment> vector; | 36 Vector<SVGTextFragment> vector; |
37 }; | 37 }; |
38 | 38 |
39 static_assert(sizeof(SVGInlineTextBox) == sizeof(ExpectedSVGInlineTextBoxSize),
"SVGInlineTextBox has an unexpected size"); | 39 static_assert(sizeof(SVGInlineTextBox) == sizeof(ExpectedSVGInlineTextBoxSize),
"SVGInlineTextBox has an unexpected size"); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 ASSERT(scalingFactor); | 74 ASSERT(scalingFactor); |
75 | 75 |
76 const ComputedStyle& style = lineLayoutItem.styleRef(); | 76 const ComputedStyle& style = lineLayoutItem.styleRef(); |
77 | 77 |
78 TextRun textRun = constructTextRun(style, fragment); | 78 TextRun textRun = constructTextRun(style, fragment); |
79 | 79 |
80 // Eventually handle lengthAdjust="spacingAndGlyphs". | 80 // Eventually handle lengthAdjust="spacingAndGlyphs". |
81 // FIXME: Handle vertical text. | 81 // FIXME: Handle vertical text. |
82 if (fragment.isTransformed()) { | 82 if (fragment.isTransformed()) { |
83 AffineTransform fragmentTransform = fragment.buildFragmentTransform(); | 83 AffineTransform fragmentTransform = fragment.buildFragmentTransform(); |
84 textRun.setHorizontalGlyphStretch(narrowPrecisionToFloat(fragmentTransfo
rm.xScale())); | 84 textRun.setHorizontalGlyphStretch(clampTo<float>(fragmentTransform.xScal
e())); |
85 } | 85 } |
86 | 86 |
87 return fragment.characterOffset - start() + lineLayoutItem.scaledFont().offs
etForPosition(textRun, position * scalingFactor, includePartialGlyphs); | 87 return fragment.characterOffset - start() + lineLayoutItem.scaledFont().offs
etForPosition(textRun, position * scalingFactor, includePartialGlyphs); |
88 } | 88 } |
89 | 89 |
90 LayoutUnit SVGInlineTextBox::positionForOffset(int) const | 90 LayoutUnit SVGInlineTextBox::positionForOffset(int) const |
91 { | 91 { |
92 // SVG doesn't use the offset <-> position selection system. | 92 // SVG doesn't use the offset <-> position selection system. |
93 ASSERT_NOT_REACHED(); | 93 ASSERT_NOT_REACHED(); |
94 return LayoutUnit(); | 94 return LayoutUnit(); |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 return true; | 260 return true; |
261 } | 261 } |
262 } | 262 } |
263 } | 263 } |
264 } | 264 } |
265 } | 265 } |
266 return false; | 266 return false; |
267 } | 267 } |
268 | 268 |
269 } // namespace blink | 269 } // namespace blink |
OLD | NEW |