| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006 Oliver Hunt <ojh16@student.canterbury.ac.nz> | 2 * Copyright (C) 2006 Oliver Hunt <ojh16@student.canterbury.ac.nz> |
| 3 * Copyright (C) 2006 Apple Computer Inc. | 3 * Copyright (C) 2006 Apple Computer Inc. |
| 4 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> | 4 * Copyright (C) 2007 Nikolas Zimmermann <zimmermann@kde.org> |
| 5 * Copyright (C) 2008 Rob Buis <buis@kde.org> | 5 * Copyright (C) 2008 Rob Buis <buis@kde.org> |
| 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 // copy of the original character data content. First, it will remove all ne
wline | 51 // copy of the original character data content. First, it will remove all ne
wline |
| 52 // characters. Then it will convert all tab characters into space characters
. | 52 // characters. Then it will convert all tab characters into space characters
. |
| 53 // Then, it will strip off all leading and trailing space characters. | 53 // Then, it will strip off all leading and trailing space characters. |
| 54 // Then, all contiguous space characters will be consolidated. | 54 // Then, all contiguous space characters will be consolidated. |
| 55 RefPtr<StringImpl> newString = string->replace('\n', StringImpl::empty()); | 55 RefPtr<StringImpl> newString = string->replace('\n', StringImpl::empty()); |
| 56 newString = newString->replace('\r', StringImpl::empty()); | 56 newString = newString->replace('\r', StringImpl::empty()); |
| 57 newString = newString->replace('\t', ' '); | 57 newString = newString->replace('\t', ' '); |
| 58 return newString.release(); | 58 return newString.release(); |
| 59 } | 59 } |
| 60 | 60 |
| 61 static float squaredDistanceToClosestPoint(const FloatRect& rect, const FloatPoi
nt& point) | |
| 62 { | |
| 63 FloatPoint closestPoint; | |
| 64 closestPoint.setX(std::max(std::min(point.x(), rect.maxX()), rect.x())); | |
| 65 closestPoint.setY(std::max(std::min(point.y(), rect.maxY()), rect.y())); | |
| 66 return (point - closestPoint).diagonalLengthSquared(); | |
| 67 } | |
| 68 | |
| 69 LayoutSVGInlineText::LayoutSVGInlineText(Node* n, PassRefPtr<StringImpl> string) | 61 LayoutSVGInlineText::LayoutSVGInlineText(Node* n, PassRefPtr<StringImpl> string) |
| 70 : LayoutText(n, applySVGWhitespaceRules(string, false)) | 62 : LayoutText(n, applySVGWhitespaceRules(string, false)) |
| 71 , m_scalingFactor(1) | 63 , m_scalingFactor(1) |
| 72 , m_layoutAttributes(this) | 64 , m_layoutAttributes(this) |
| 73 { | 65 { |
| 74 } | 66 } |
| 75 | 67 |
| 76 void LayoutSVGInlineText::setTextInternal(PassRefPtr<StringImpl> text) | 68 void LayoutSVGInlineText::setTextInternal(PassRefPtr<StringImpl> text) |
| 77 { | 69 { |
| 78 LayoutText::setTextInternal(text); | 70 LayoutText::setTextInternal(text); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) { | 172 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) { |
| 181 if (!box->isSVGInlineTextBox()) | 173 if (!box->isSVGInlineTextBox()) |
| 182 continue; | 174 continue; |
| 183 | 175 |
| 184 SVGInlineTextBox* textBox = toSVGInlineTextBox(box); | 176 SVGInlineTextBox* textBox = toSVGInlineTextBox(box); |
| 185 for (const SVGTextFragment& fragment : textBox->textFragments()) { | 177 for (const SVGTextFragment& fragment : textBox->textFragments()) { |
| 186 FloatRect fragmentRect = fragment.boundingBox(baseline); | 178 FloatRect fragmentRect = fragment.boundingBox(baseline); |
| 187 | 179 |
| 188 float distance = 0; | 180 float distance = 0; |
| 189 if (!fragmentRect.contains(absolutePoint)) | 181 if (!fragmentRect.contains(absolutePoint)) |
| 190 distance = squaredDistanceToClosestPoint(fragmentRect, absoluteP
oint); | 182 distance = fragmentRect.squaredDistanceTo(absolutePoint); |
| 191 | 183 |
| 192 if (distance <= closestDistance) { | 184 if (distance <= closestDistance) { |
| 193 closestDistance = distance; | 185 closestDistance = distance; |
| 194 closestDistanceBox = textBox; | 186 closestDistanceBox = textBox; |
| 195 closestDistanceFragment = &fragment; | 187 closestDistanceFragment = &fragment; |
| 196 closestDistancePosition = fragmentRect.x(); | 188 closestDistancePosition = fragmentRect.x(); |
| 197 } | 189 } |
| 198 } | 190 } |
| 199 } | 191 } |
| 200 | 192 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 | 239 |
| 248 PassRefPtr<StringImpl> LayoutSVGInlineText::originalText() const | 240 PassRefPtr<StringImpl> LayoutSVGInlineText::originalText() const |
| 249 { | 241 { |
| 250 RefPtr<StringImpl> result = LayoutText::originalText(); | 242 RefPtr<StringImpl> result = LayoutText::originalText(); |
| 251 if (!result) | 243 if (!result) |
| 252 return nullptr; | 244 return nullptr; |
| 253 return applySVGWhitespaceRules(result, style() && style()->whiteSpace() == P
RE); | 245 return applySVGWhitespaceRules(result, style() && style()->whiteSpace() == P
RE); |
| 254 } | 246 } |
| 255 | 247 |
| 256 } | 248 } |
| OLD | NEW |