| Index: Source/core/html/TimeRanges.cpp
|
| diff --git a/Source/core/html/TimeRanges.cpp b/Source/core/html/TimeRanges.cpp
|
| index 943eb93468f6899f8510f24fee18dce0a1abbc79..9c6456794a74e4559cb6126af4c4de43ac8174d4 100644
|
| --- a/Source/core/html/TimeRanges.cpp
|
| +++ b/Source/core/html/TimeRanges.cpp
|
| @@ -184,19 +184,29 @@ bool TimeRanges::contain(double time) const
|
|
|
| double TimeRanges::nearest(double time) const
|
| {
|
| - double closest = 0;
|
| unsigned count = length();
|
| + double bestMatch = 0;
|
| + double bestDelta = std::numeric_limits<double>::infinity();
|
| for (unsigned ndx = 0; ndx < count; ndx++) {
|
| double startTime = start(ndx, IGNORE_EXCEPTION);
|
| double endTime = end(ndx, IGNORE_EXCEPTION);
|
| if (time >= startTime && time <= endTime)
|
| return time;
|
| - if (fabs(startTime - time) < closest)
|
| - closest = fabs(startTime - time);
|
| - else if (fabs(endTime - time) < closest)
|
| - closest = fabs(endTime - time);
|
| + if (time < startTime) {
|
| + double delta = startTime - time;
|
| + if (delta < bestDelta) {
|
| + bestMatch = startTime;
|
| + bestDelta = delta;
|
| + }
|
| + } else if (time > endTime) {
|
| + double delta = time - endTime;
|
| + if (delta < bestDelta) {
|
| + bestMatch = endTime;
|
| + bestDelta = delta;
|
| + }
|
| + }
|
| }
|
| - return closest;
|
| + return bestMatch;
|
| }
|
|
|
| void TimeRanges::trace(Visitor* visitor)
|
|
|