OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012, Google Inc. All rights reserved. | 2 * Copyright (c) 2012, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 { | 220 { |
221 #if ENABLE(SUBPIXEL_LAYOUT) | 221 #if ENABLE(SUBPIXEL_LAYOUT) |
222 if (m_value >= 0) | 222 if (m_value >= 0) |
223 return toInt(); | 223 return toInt(); |
224 return (m_value - kFixedPointDenominator + 1) / kFixedPointDenominator; | 224 return (m_value - kFixedPointDenominator + 1) / kFixedPointDenominator; |
225 #else | 225 #else |
226 return m_value; | 226 return m_value; |
227 #endif | 227 #endif |
228 } | 228 } |
229 | 229 |
| 230 FractionalLayoutUnit fraction() const |
| 231 { |
| 232 // Add the fraction to the size (as opposed to the full location) to avo
id overflows. |
| 233 // Compute fraction using the mod operator to preserve the sign of the v
alue as it may affect rounding. |
| 234 FractionalLayoutUnit fraction; |
| 235 fraction.setRawValue(rawValue() % kFixedPointDenominator); |
| 236 return fraction; |
| 237 } |
| 238 |
230 #if ENABLE(SUBPIXEL_LAYOUT) | 239 #if ENABLE(SUBPIXEL_LAYOUT) |
231 static float epsilon() { return 1.0f / kFixedPointDenominator; } | 240 static float epsilon() { return 1.0f / kFixedPointDenominator; } |
232 #else | 241 #else |
233 static int epsilon() { return 0; } | 242 static int epsilon() { return 0; } |
234 #endif | 243 #endif |
235 static const FractionalLayoutUnit max() | 244 static const FractionalLayoutUnit max() |
236 { | 245 { |
237 FractionalLayoutUnit m; | 246 FractionalLayoutUnit m; |
238 m.m_value = std::numeric_limits<int>::max(); | 247 m.m_value = std::numeric_limits<int>::max(); |
239 return m; | 248 return m; |
(...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
800 } | 809 } |
801 | 810 |
802 inline float& operator/=(float& a, const FractionalLayoutUnit& b) | 811 inline float& operator/=(float& a, const FractionalLayoutUnit& b) |
803 { | 812 { |
804 a = a / b; | 813 a = a / b; |
805 return a; | 814 return a; |
806 } | 815 } |
807 | 816 |
808 inline int snapSizeToPixel(FractionalLayoutUnit size, FractionalLayoutUnit locat
ion) | 817 inline int snapSizeToPixel(FractionalLayoutUnit size, FractionalLayoutUnit locat
ion) |
809 { | 818 { |
810 FractionalLayoutUnit fraction = location - location.floor(); | 819 FractionalLayoutUnit fraction = location.fraction(); |
811 return (fraction + size).round() - fraction.round(); | 820 return (fraction + size).round() - fraction.round(); |
812 } | 821 } |
813 | 822 |
814 #if PLATFORM(QT) | 823 #if PLATFORM(QT) |
815 inline QDataStream& operator<<(QDataStream& stream, const FractionalLayoutUnit&
value) | 824 inline QDataStream& operator<<(QDataStream& stream, const FractionalLayoutUnit&
value) |
816 { | 825 { |
817 if (kFixedPointDenominator == 1) | 826 if (kFixedPointDenominator == 1) |
818 stream << value.rawValue(); | 827 stream << value.rawValue(); |
819 else | 828 else |
820 stream << QString::fromLatin1("%1").arg(value.toFloat(), 0, 'f', 2); | 829 stream << QString::fromLatin1("%1").arg(value.toFloat(), 0, 'f', 2); |
821 | 830 |
822 return stream; | 831 return stream; |
823 } | 832 } |
824 | 833 |
825 inline QDataStream& operator>>(QDataStream& stream, FractionalLayoutUnit& value) | 834 inline QDataStream& operator>>(QDataStream& stream, FractionalLayoutUnit& value) |
826 { | 835 { |
827 float v; | 836 float v; |
828 stream >> v; | 837 stream >> v; |
829 value = v; | 838 value = v; |
830 return stream; | 839 return stream; |
831 } | 840 } |
832 #endif | 841 #endif |
833 | 842 |
834 } // namespace WebCore | 843 } // namespace WebCore |
835 | 844 |
836 #endif // FractionalLayoutUnit_h | 845 #endif // FractionalLayoutUnit_h |
OLD | NEW |