OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) | 2 * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) |
3 * Copyright (C) 2009 Antonio Gomes <tonikitoo@webkit.org> | 3 * Copyright (C) 2009 Antonio Gomes <tonikitoo@webkit.org> |
4 * | 4 * |
5 * All rights reserved. | 5 * All rights reserved. |
6 * | 6 * |
7 * Redistribution and use in source and binary forms, with or without | 7 * Redistribution and use in source and binary forms, with or without |
8 * modification, are permitted provided that the following conditions | 8 * modification, are permitted provided that the following conditions |
9 * are met: | 9 * are met: |
10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 | 237 |
238 if (canScrollInDirection(container, type)) { | 238 if (canScrollInDirection(container, type)) { |
239 int dx = 0; | 239 int dx = 0; |
240 int dy = 0; | 240 int dy = 0; |
241 // TODO(leviw): Why are these values truncated (toInt) instead of rounding? | 241 // TODO(leviw): Why are these values truncated (toInt) instead of rounding? |
242 FrameView* frameView = container->document().view(); | 242 FrameView* frameView = container->document().view(); |
243 int pixelsPerLineStep = ScrollableArea::pixelsPerLineStep( | 243 int pixelsPerLineStep = ScrollableArea::pixelsPerLineStep( |
244 frameView ? frameView->getHostWindow() : nullptr); | 244 frameView ? frameView->getHostWindow() : nullptr); |
245 switch (type) { | 245 switch (type) { |
246 case WebFocusTypeLeft: | 246 case WebFocusTypeLeft: |
247 dx = -pixelsPerLineStep; | 247 dx = -std::min(pixelsPerLineStep, |
| 248 container->layoutBox()->scrollLeft().toInt()); |
248 break; | 249 break; |
249 case WebFocusTypeRight: | 250 case WebFocusTypeRight: |
250 ASSERT(container->layoutBox()->scrollWidth() > | 251 ASSERT(container->layoutBox()->scrollWidth() > |
251 (container->layoutBox()->scrollLeft() + | 252 (container->layoutBox()->scrollLeft() + |
252 container->layoutBox()->clientWidth())); | 253 container->layoutBox()->clientWidth())); |
253 dx = pixelsPerLineStep; | 254 dx = std::min(pixelsPerLineStep, |
| 255 (container->layoutBox()->scrollWidth() - |
| 256 (container->layoutBox()->scrollLeft() + |
| 257 container->layoutBox()->clientWidth())) |
| 258 .toInt()); |
254 break; | 259 break; |
255 case WebFocusTypeUp: | 260 case WebFocusTypeUp: |
256 dy = -pixelsPerLineStep; | 261 dy = -std::min(pixelsPerLineStep, |
| 262 container->layoutBox()->scrollTop().toInt()); |
257 break; | 263 break; |
258 case WebFocusTypeDown: | 264 case WebFocusTypeDown: |
259 ASSERT(container->layoutBox()->scrollHeight() - | 265 ASSERT(container->layoutBox()->scrollHeight() - |
260 (container->layoutBox()->scrollTop() + | 266 (container->layoutBox()->scrollTop() + |
261 container->layoutBox()->clientHeight())); | 267 container->layoutBox()->clientHeight())); |
262 dy = pixelsPerLineStep; | 268 dy = std::min(pixelsPerLineStep, |
| 269 (container->layoutBox()->scrollHeight() - |
| 270 (container->layoutBox()->scrollTop() + |
| 271 container->layoutBox()->clientHeight())) |
| 272 .toInt()); |
263 break; | 273 break; |
264 default: | 274 default: |
265 ASSERT_NOT_REACHED(); | 275 ASSERT_NOT_REACHED(); |
266 return false; | 276 return false; |
267 } | 277 } |
268 | 278 |
269 container->layoutBox()->scrollByRecursively(IntSize(dx, dy)); | 279 container->layoutBox()->scrollByRecursively(IntSize(dx, dy)); |
270 return true; | 280 return true; |
271 } | 281 } |
272 | 282 |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 return rect; | 690 return rect; |
681 } | 691 } |
682 | 692 |
683 HTMLFrameOwnerElement* frameOwnerElement(FocusCandidate& candidate) { | 693 HTMLFrameOwnerElement* frameOwnerElement(FocusCandidate& candidate) { |
684 return candidate.isFrameOwnerElement() | 694 return candidate.isFrameOwnerElement() |
685 ? toHTMLFrameOwnerElement(candidate.visibleNode) | 695 ? toHTMLFrameOwnerElement(candidate.visibleNode) |
686 : nullptr; | 696 : nullptr; |
687 }; | 697 }; |
688 | 698 |
689 } // namespace blink | 699 } // namespace blink |
OLD | NEW |