| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/layer_tree_host_impl.h" | 5 #include "cc/layer_tree_host_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 targetRenderPass->shared_quad_state_list, | 484 targetRenderPass->shared_quad_state_list, |
| 485 rootLayer, | 485 rootLayer, |
| 486 occlusionTracker, | 486 occlusionTracker, |
| 487 rootLayer->showDebugBorders(), | 487 rootLayer->showDebugBorders(), |
| 488 forSurface); | 488 forSurface); |
| 489 | 489 |
| 490 // Manually create the quad state for the gutter quads, as the root layer | 490 // Manually create the quad state for the gutter quads, as the root layer |
| 491 // doesn't have any bounds and so can't generate this itself. | 491 // doesn't have any bounds and so can't generate this itself. |
| 492 // FIXME: Make the gutter quads generated by the solid color layer (make it
smarter about generating quads to fill unoccluded areas). | 492 // FIXME: Make the gutter quads generated by the solid color layer (make it
smarter about generating quads to fill unoccluded areas). |
| 493 | 493 |
| 494 DCHECK(rootLayer->screenSpaceTransform().IsInvertible()); | |
| 495 | |
| 496 gfx::Rect rootTargetRect = rootLayer->renderSurface()->contentRect(); | 494 gfx::Rect rootTargetRect = rootLayer->renderSurface()->contentRect(); |
| 497 float opacity = 1; | 495 float opacity = 1; |
| 498 SharedQuadState* sharedQuadState = quadCuller.useSharedQuadState(SharedQuadS
tate::Create()); | 496 SharedQuadState* sharedQuadState = quadCuller.useSharedQuadState(SharedQuadS
tate::Create()); |
| 499 sharedQuadState->SetAll(rootLayer->drawTransform(), | 497 sharedQuadState->SetAll(rootLayer->drawTransform(), |
| 500 rootTargetRect, | 498 rootTargetRect, |
| 501 rootTargetRect, | 499 rootTargetRect, |
| 502 rootTargetRect, | 500 rootTargetRect, |
| 503 false, | 501 false, |
| 504 opacity); | 502 opacity); |
| 505 | 503 |
| 506 AppendQuadsData appendQuadsData; | 504 AppendQuadsData appendQuadsData; |
| 507 gfx::Transform transformToLayerSpace = MathUtil::inverse(rootLayer->screenSp
aceTransform()); | 505 |
| 506 gfx::Transform transformToLayerSpace(gfx::Transform::kSkipInitialization); |
| 507 bool didInvert = rootLayer->screenSpaceTransform().GetInverse(&transformToLa
yerSpace); |
| 508 DCHECK(didInvert); |
| 508 for (Region::Iterator fillRects(fillRegion); fillRects.has_rect(); fillRects
.next()) { | 509 for (Region::Iterator fillRects(fillRegion); fillRects.has_rect(); fillRects
.next()) { |
| 509 // The root layer transform is composed of translations and scales only, | 510 // The root layer transform is composed of translations and scales only, |
| 510 // no perspective, so mapping is sufficient. | 511 // no perspective, so mapping is sufficient (as opposed to projecting). |
| 511 gfx::Rect layerRect = MathUtil::mapClippedRect(transformToLayerSpace, fi
llRects.rect()); | 512 gfx::Rect layerRect = MathUtil::mapClippedRect(transformToLayerSpace, fi
llRects.rect()); |
| 512 // Skip the quad culler and just append the quads directly to avoid | 513 // Skip the quad culler and just append the quads directly to avoid |
| 513 // occlusion checks. | 514 // occlusion checks. |
| 514 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); | 515 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); |
| 515 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); | 516 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); |
| 516 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData); | 517 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData); |
| 517 } | 518 } |
| 518 } | 519 } |
| 519 | 520 |
| 520 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) | 521 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) |
| (...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1270 return ScrollStarted; | 1271 return ScrollStarted; |
| 1271 } | 1272 } |
| 1272 return ScrollIgnored; | 1273 return ScrollIgnored; |
| 1273 } | 1274 } |
| 1274 | 1275 |
| 1275 static gfx::Vector2dF scrollLayerWithViewportSpaceDelta(PinchZoomViewport* viewp
ort, LayerImpl& layerImpl, float scaleFromViewportToScreenSpace, gfx::PointF vie
wportPoint, gfx::Vector2dF viewportDelta) | 1276 static gfx::Vector2dF scrollLayerWithViewportSpaceDelta(PinchZoomViewport* viewp
ort, LayerImpl& layerImpl, float scaleFromViewportToScreenSpace, gfx::PointF vie
wportPoint, gfx::Vector2dF viewportDelta) |
| 1276 { | 1277 { |
| 1277 // Layers with non-invertible screen space transforms should not have passed
the scroll hit | 1278 // Layers with non-invertible screen space transforms should not have passed
the scroll hit |
| 1278 // test in the first place. | 1279 // test in the first place. |
| 1279 DCHECK(layerImpl.screenSpaceTransform().IsInvertible()); | 1280 DCHECK(layerImpl.screenSpaceTransform().IsInvertible()); |
| 1280 gfx::Transform inverseScreenSpaceTransform = MathUtil::inverse(layerImpl.scr
eenSpaceTransform()); | 1281 gfx::Transform inverseScreenSpaceTransform(gfx::Transform::kSkipInitializati
on); |
| 1282 bool didInvert = layerImpl.screenSpaceTransform().GetInverse(&inverseScreenS
paceTransform); |
| 1283 // TODO: With the advent of impl-side crolling for non-root layers, we may |
| 1284 // need to explicitly handle uninvertible transforms here. |
| 1285 DCHECK(didInvert); |
| 1281 | 1286 |
| 1282 gfx::PointF screenSpacePoint = gfx::ScalePoint(viewportPoint, scaleFromViewp
ortToScreenSpace); | 1287 gfx::PointF screenSpacePoint = gfx::ScalePoint(viewportPoint, scaleFromViewp
ortToScreenSpace); |
| 1283 | 1288 |
| 1284 gfx::Vector2dF screenSpaceDelta = viewportDelta; | 1289 gfx::Vector2dF screenSpaceDelta = viewportDelta; |
| 1285 screenSpaceDelta.Scale(scaleFromViewportToScreenSpace); | 1290 screenSpaceDelta.Scale(scaleFromViewportToScreenSpace); |
| 1286 | 1291 |
| 1287 // First project the scroll start and end points to local layer space to fin
d the scroll delta | 1292 // First project the scroll start and end points to local layer space to fin
d the scroll delta |
| 1288 // in layer coordinates. | 1293 // in layer coordinates. |
| 1289 bool startClipped, endClipped; | 1294 bool startClipped, endClipped; |
| 1290 gfx::PointF screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; | 1295 gfx::PointF screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1718 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); | 1723 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); |
| 1719 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); | 1724 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
| 1720 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1725 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
| 1721 m_client->setNeedsRedrawOnImplThread(); | 1726 m_client->setNeedsRedrawOnImplThread(); |
| 1722 | 1727 |
| 1723 for (size_t i = 0; i < layer->children().size(); ++i) | 1728 for (size_t i = 0; i < layer->children().size(); ++i) |
| 1724 animateScrollbarsRecursive(layer->children()[i], time); | 1729 animateScrollbarsRecursive(layer->children()[i], time); |
| 1725 } | 1730 } |
| 1726 | 1731 |
| 1727 } // namespace cc | 1732 } // namespace cc |
| OLD | NEW |