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 |