OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 Google Inc. All rights reserved. | 2 * Copyright (c) 2012 Google Inc. All rights reserved. |
3 * Copyright (C) 2013 BlackBerry Limited. All rights reserved. | 3 * Copyright (C) 2013 BlackBerry Limited. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
7 * met: | 7 * met: |
8 * | 8 * |
9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 16 matching lines...) Expand all Loading... |
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
30 */ | 30 */ |
31 | 31 |
32 #include "config.h" | 32 #include "config.h" |
33 #include "platform/fonts/harfbuzz/HarfBuzzShaper.h" | 33 #include "platform/fonts/harfbuzz/HarfBuzzShaper.h" |
34 | 34 |
35 #include "RuntimeEnabledFeatures.h" | 35 #include "RuntimeEnabledFeatures.h" |
36 #include "hb.h" | 36 #include "hb.h" |
| 37 #include "platform/LayoutUnit.h" |
37 #include "platform/fonts/Character.h" | 38 #include "platform/fonts/Character.h" |
38 #include "platform/fonts/Font.h" | 39 #include "platform/fonts/Font.h" |
39 #include "platform/fonts/harfbuzz/HarfBuzzFace.h" | 40 #include "platform/fonts/harfbuzz/HarfBuzzFace.h" |
40 #include "platform/text/SurrogatePairAwareTextIterator.h" | 41 #include "platform/text/SurrogatePairAwareTextIterator.h" |
41 #include "platform/text/TextBreakIterator.h" | 42 #include "platform/text/TextBreakIterator.h" |
42 #include "wtf/Compiler.h" | 43 #include "wtf/Compiler.h" |
43 #include "wtf/MathExtras.h" | 44 #include "wtf/MathExtras.h" |
44 #include "wtf/unicode/Unicode.h" | 45 #include "wtf/unicode/Unicode.h" |
45 #include <unicode/normlzr.h> | 46 #include <unicode/normlzr.h> |
46 #include <unicode/uchar.h> | 47 #include <unicode/uchar.h> |
(...skipping 1057 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1104 currentX += m_harfBuzzRuns[i]->width(); | 1105 currentX += m_harfBuzzRuns[i]->width(); |
1105 } | 1106 } |
1106 | 1107 |
1107 // The position in question might be just after the text. | 1108 // The position in question might be just after the text. |
1108 if (!foundFromX) | 1109 if (!foundFromX) |
1109 fromX = 0; | 1110 fromX = 0; |
1110 if (!foundToX) | 1111 if (!foundToX) |
1111 toX = m_run.rtl() ? 0 : m_totalWidth; | 1112 toX = m_run.rtl() ? 0 : m_totalWidth; |
1112 | 1113 |
1113 // Using floorf() and roundf() as the same as mac port. | 1114 // Using floorf() and roundf() as the same as mac port. |
1114 if (fromX < toX) | 1115 // Use LayoutUnit::epsilon() to ensure that values that cannot be stored as |
1115 return FloatRect(floorf(point.x() + fromX), point.y(), roundf(toX - from
X), height); | 1116 // an integer are floored to n and not n-1 due to floating point imprecision
. |
1116 return FloatRect(floorf(point.x() + toX), point.y(), roundf(fromX - toX), he
ight); | 1117 if (fromX < toX) { |
| 1118 float pixelAlignedX = floorf(point.x() + fromX + LayoutUnit::epsilon()); |
| 1119 return FloatRect(floorf(point.x() + fromX), |
| 1120 point.y(), |
| 1121 roundf(point.x() + toX) - pixelAlignedX, |
| 1122 height); |
| 1123 } |
| 1124 |
| 1125 float pixelAlignedX = floorf(point.x() + toX + LayoutUnit::epsilon()); |
| 1126 return FloatRect(floorf(point.x() + toX), |
| 1127 point.y(), |
| 1128 roundf(point.x() + fromX) - pixelAlignedX, |
| 1129 height); |
1117 } | 1130 } |
1118 | 1131 |
1119 } // namespace WebCore | 1132 } // namespace WebCore |
OLD | NEW |