| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011 Apple 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 | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 if (settings->useSolidColorScrollbars()) { | 374 if (settings->useSolidColorScrollbars()) { |
| 375 ASSERT(RuntimeEnabledFeatures::overlayScrollbarsEnabled()); | 375 ASSERT(RuntimeEnabledFeatures::overlayScrollbarsEnabled()); |
| 376 webScrollbarLayer = createSolidColorScrollbarLayer(orientation,
scrollbar->theme()->thumbThickness(scrollbar), scrollbar->theme()->trackPosition
(scrollbar), scrollableArea->shouldPlaceVerticalScrollbarOnLeft()); | 376 webScrollbarLayer = createSolidColorScrollbarLayer(orientation,
scrollbar->theme()->thumbThickness(scrollbar), scrollbar->theme()->trackPosition
(scrollbar), scrollableArea->shouldPlaceVerticalScrollbarOnLeft()); |
| 377 } else { | 377 } else { |
| 378 webScrollbarLayer = createScrollbarLayer(scrollbar); | 378 webScrollbarLayer = createScrollbarLayer(scrollbar); |
| 379 } | 379 } |
| 380 scrollbarLayer = addWebScrollbarLayer(scrollableArea, orientation, w
ebScrollbarLayer.release()); | 380 scrollbarLayer = addWebScrollbarLayer(scrollableArea, orientation, w
ebScrollbarLayer.release()); |
| 381 } | 381 } |
| 382 | 382 |
| 383 WebLayer* scrollLayer = toWebLayer(scrollableArea->layerForScrolling()); | 383 WebLayer* scrollLayer = toWebLayer(scrollableArea->layerForScrolling()); |
| 384 WebLayer* scrollbarContainerLayer = toWebLayer(scrollableArea->layerForS
crollbarContainer()); | 384 WebLayer* containerLayer = toWebLayer(scrollableArea->layerForContainer(
)); |
| 385 setupScrollbarLayer(scrollbarGraphicsLayer, scrollbarLayer, scrollLayer,
scrollbarContainerLayer); | 385 setupScrollbarLayer(scrollbarGraphicsLayer, scrollbarLayer, scrollLayer,
containerLayer); |
| 386 | 386 |
| 387 // Root layer non-overlay scrollbars should be marked opaque to disable | 387 // Root layer non-overlay scrollbars should be marked opaque to disable |
| 388 // blending. | 388 // blending. |
| 389 bool isOpaqueScrollbar = !scrollbar->isOverlayScrollbar(); | 389 bool isOpaqueScrollbar = !scrollbar->isOverlayScrollbar(); |
| 390 scrollbarGraphicsLayer->setContentsOpaque(isMainFrame && isOpaqueScrollb
ar); | 390 scrollbarGraphicsLayer->setContentsOpaque(isMainFrame && isOpaqueScrollb
ar); |
| 391 } else | 391 } else |
| 392 removeWebScrollbarLayer(scrollableArea, orientation); | 392 removeWebScrollbarLayer(scrollableArea, orientation); |
| 393 } | 393 } |
| 394 | 394 |
| 395 bool ScrollingCoordinator::scrollableAreaScrollLayerDidChange(ScrollableArea* sc
rollableArea) | 395 bool ScrollingCoordinator::scrollableAreaScrollLayerDidChange(ScrollableArea* sc
rollableArea) |
| 396 { | 396 { |
| 397 GraphicsLayer* scrollLayer = scrollableArea->layerForScrolling(); | 397 GraphicsLayer* scrollLayer = scrollableArea->layerForScrolling(); |
| 398 | 398 |
| 399 if (scrollLayer) { | 399 if (scrollLayer) { |
| 400 ASSERT(m_page); | 400 ASSERT(m_page); |
| 401 scrollLayer->setScrollableArea(scrollableArea, isForViewport(scrollableA
rea)); | 401 scrollLayer->setScrollableArea(scrollableArea, isForViewport(scrollableA
rea)); |
| 402 } | 402 } |
| 403 | 403 |
| 404 WebLayer* webLayer = toWebLayer(scrollableArea->layerForScrolling()); | 404 WebLayer* webLayer = toWebLayer(scrollableArea->layerForScrolling()); |
| 405 WebLayer* containerLayer = toWebLayer(scrollableArea->layerForContainer()); | 405 WebLayer* containerLayer = toWebLayer(scrollableArea->layerForContainer()); |
| 406 WebLayer* scrollbarContainerLayer = toWebLayer(scrollableArea->layerForScrol
lbarContainer()); | |
| 407 if (webLayer) { | 406 if (webLayer) { |
| 408 webLayer->setScrollClipLayer(containerLayer); | 407 webLayer->setScrollClipLayer(containerLayer); |
| 409 // Non-layered Viewport constrained objects, e.g. fixed position element
s, are | 408 // Non-layered Viewport constrained objects, e.g. fixed position element
s, are |
| 410 // positioned in Blink using integer coordinates. In that case, we don't
want | 409 // positioned in Blink using integer coordinates. In that case, we don't
want |
| 411 // to set the WebLayer's scroll position at fractional precision otherwi
se the | 410 // to set the WebLayer's scroll position at fractional precision otherwi
se the |
| 412 // WebLayer's position after snapping to device pixel can be off with re
gard to | 411 // WebLayer's position after snapping to device pixel can be off with re
gard to |
| 413 // fixed position elements. | 412 // fixed position elements. |
| 414 if (m_lastMainThreadScrollingReasons & ScrollingCoordinator::HasNonLayer
ViewportConstrainedObjects) { | 413 if (m_lastMainThreadScrollingReasons & ScrollingCoordinator::HasNonLayer
ViewportConstrainedObjects) { |
| 415 webLayer->setScrollPositionDouble(DoublePoint(scrollableArea->scroll
Position() - scrollableArea->minimumScrollPosition())); | 414 webLayer->setScrollPositionDouble(DoublePoint(scrollableArea->scroll
Position() - scrollableArea->minimumScrollPosition())); |
| 416 } else { | 415 } else { |
| 417 DoublePoint scrollPosition(scrollableArea->scrollPositionDouble() -
scrollableArea->minimumScrollPositionDouble()); | 416 DoublePoint scrollPosition(scrollableArea->scrollPositionDouble() -
scrollableArea->minimumScrollPositionDouble()); |
| 418 IntPoint flooredScrollPosition(flooredIntPoint(scrollPosition)); | 417 IntPoint flooredScrollPosition(flooredIntPoint(scrollPosition)); |
| 419 DoublePoint fractionalPart(scrollPosition.x() - flooredScrollPositio
n.x(), scrollPosition.y() - flooredScrollPosition.y()); | 418 DoublePoint fractionalPart(scrollPosition.x() - flooredScrollPositio
n.x(), scrollPosition.y() - flooredScrollPosition.y()); |
| 420 webLayer->setScrollPositionDouble(scrollPosition); | 419 webLayer->setScrollPositionDouble(scrollPosition); |
| 421 // Blink can only use the integer part of the scroll offset to posit
ion elements. | 420 // Blink can only use the integer part of the scroll offset to posit
ion elements. |
| 422 // Sends the fractional part of the scroll offset to CC as scroll ad
justment for | 421 // Sends the fractional part of the scroll offset to CC as scroll ad
justment for |
| 423 // fixed-position layer. | 422 // fixed-position layer. |
| 424 webLayer->setScrollCompensationAdjustment(fractionalPart); | 423 webLayer->setScrollCompensationAdjustment(fractionalPart); |
| 425 } | 424 } |
| 426 | 425 |
| 427 webLayer->setBounds(scrollableArea->contentsSize()); | 426 webLayer->setBounds(scrollableArea->contentsSize()); |
| 428 bool canScrollX = scrollableArea->userInputScrollable(HorizontalScrollba
r); | 427 bool canScrollX = scrollableArea->userInputScrollable(HorizontalScrollba
r); |
| 429 bool canScrollY = scrollableArea->userInputScrollable(VerticalScrollbar)
; | 428 bool canScrollY = scrollableArea->userInputScrollable(VerticalScrollbar)
; |
| 430 webLayer->setUserScrollable(canScrollX, canScrollY); | 429 webLayer->setUserScrollable(canScrollX, canScrollY); |
| 431 } | 430 } |
| 432 if (WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea,
HorizontalScrollbar)) { | 431 if (WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea,
HorizontalScrollbar)) { |
| 433 GraphicsLayer* horizontalScrollbarLayer = scrollableArea->layerForHorizo
ntalScrollbar(); | 432 GraphicsLayer* horizontalScrollbarLayer = scrollableArea->layerForHorizo
ntalScrollbar(); |
| 434 if (horizontalScrollbarLayer) | 433 if (horizontalScrollbarLayer) |
| 435 setupScrollbarLayer(horizontalScrollbarLayer, scrollbarLayer, webLay
er, scrollbarContainerLayer); | 434 setupScrollbarLayer(horizontalScrollbarLayer, scrollbarLayer, webLay
er, containerLayer); |
| 436 } | 435 } |
| 437 if (WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea,
VerticalScrollbar)) { | 436 if (WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea,
VerticalScrollbar)) { |
| 438 GraphicsLayer* verticalScrollbarLayer = scrollableArea->layerForVertical
Scrollbar(); | 437 GraphicsLayer* verticalScrollbarLayer = scrollableArea->layerForVertical
Scrollbar(); |
| 439 | |
| 440 if (verticalScrollbarLayer) | 438 if (verticalScrollbarLayer) |
| 441 setupScrollbarLayer(verticalScrollbarLayer, scrollbarLayer, webLayer
, scrollbarContainerLayer); | 439 setupScrollbarLayer(verticalScrollbarLayer, scrollbarLayer, webLayer
, containerLayer); |
| 442 } | 440 } |
| 443 | 441 |
| 444 // Update the viewport layer registration if the outer viewport may have cha
nged. | 442 // Update the viewport layer registration if the outer viewport may have cha
nged. |
| 445 if (m_page->settings().rootLayerScrolls() && isForRootLayer(scrollableArea)) | 443 if (m_page->settings().rootLayerScrolls() && isForRootLayer(scrollableArea)) |
| 446 m_page->chromeClient().registerViewportLayers(); | 444 m_page->chromeClient().registerViewportLayers(); |
| 447 | 445 |
| 448 scrollableArea->layerForScrollingDidChange(m_programmaticScrollAnimatorTimel
ine.get()); | 446 scrollableArea->layerForScrollingDidChange(m_programmaticScrollAnimatorTimel
ine.get()); |
| 449 | 447 |
| 450 return !!webLayer; | 448 return !!webLayer; |
| 451 } | 449 } |
| (...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1078 bool frameIsScrollable = frameView && frameView->isScrollable(); | 1076 bool frameIsScrollable = frameView && frameView->isScrollable(); |
| 1079 if (frameIsScrollable != m_wasFrameScrollable) | 1077 if (frameIsScrollable != m_wasFrameScrollable) |
| 1080 return true; | 1078 return true; |
| 1081 | 1079 |
| 1082 if (WebLayer* scrollLayer = frameView ? toWebLayer(frameView->layerForScroll
ing()) : nullptr) | 1080 if (WebLayer* scrollLayer = frameView ? toWebLayer(frameView->layerForScroll
ing()) : nullptr) |
| 1083 return WebSize(frameView->contentsSize()) != scrollLayer->bounds(); | 1081 return WebSize(frameView->contentsSize()) != scrollLayer->bounds(); |
| 1084 return false; | 1082 return false; |
| 1085 } | 1083 } |
| 1086 | 1084 |
| 1087 } // namespace blink | 1085 } // namespace blink |
| OLD | NEW |