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 DCHECK(rootLayer->screenSpaceTransform().IsInvertible()); | |
danakj
2013/01/04 21:56:07
This DCHECK is redundant with the DCHECK(didInvert
| |
507 gfx::Transform transformToLayerSpace(gfx::Transform::kSkipInitialization); | |
508 bool didInvert = rootLayer->screenSpaceTransform().GetInverse(&transformToLa yerSpace); | |
509 DCHECK(didInvert); | |
508 for (Region::Iterator fillRects(fillRegion); fillRects.has_rect(); fillRects .next()) { | 510 for (Region::Iterator fillRects(fillRegion); fillRects.has_rect(); fillRects .next()) { |
509 // The root layer transform is composed of translations and scales only, | 511 // The root layer transform is composed of translations and scales only, |
510 // no perspective, so mapping is sufficient. | 512 // no perspective, so mapping is sufficient (as opposed to projecting). |
danakj
2013/01/04 21:56:07
^_^
| |
511 gfx::Rect layerRect = MathUtil::mapClippedRect(transformToLayerSpace, fi llRects.rect()); | 513 gfx::Rect layerRect = MathUtil::mapClippedRect(transformToLayerSpace, fi llRects.rect()); |
512 // Skip the quad culler and just append the quads directly to avoid | 514 // Skip the quad culler and just append the quads directly to avoid |
513 // occlusion checks. | 515 // occlusion checks. |
514 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); | 516 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); |
515 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); | 517 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); |
516 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData); | 518 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData); |
517 } | 519 } |
518 } | 520 } |
519 | 521 |
520 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) | 522 bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame) |
(...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1270 return ScrollStarted; | 1272 return ScrollStarted; |
1271 } | 1273 } |
1272 return ScrollIgnored; | 1274 return ScrollIgnored; |
1273 } | 1275 } |
1274 | 1276 |
1275 static gfx::Vector2dF scrollLayerWithViewportSpaceDelta(PinchZoomViewport* viewp ort, LayerImpl& layerImpl, float scaleFromViewportToScreenSpace, gfx::PointF vie wportPoint, gfx::Vector2dF viewportDelta) | 1277 static gfx::Vector2dF scrollLayerWithViewportSpaceDelta(PinchZoomViewport* viewp ort, LayerImpl& layerImpl, float scaleFromViewportToScreenSpace, gfx::PointF vie wportPoint, gfx::Vector2dF viewportDelta) |
1276 { | 1278 { |
1277 // Layers with non-invertible screen space transforms should not have passed the scroll hit | 1279 // Layers with non-invertible screen space transforms should not have passed the scroll hit |
1278 // test in the first place. | 1280 // test in the first place. |
1279 DCHECK(layerImpl.screenSpaceTransform().IsInvertible()); | 1281 DCHECK(layerImpl.screenSpaceTransform().IsInvertible()); |
1280 gfx::Transform inverseScreenSpaceTransform = MathUtil::inverse(layerImpl.scr eenSpaceTransform()); | 1282 gfx::Transform inverseScreenSpaceTransform(gfx::Transform::kSkipInitializati on); |
1283 bool didInvert = layerImpl.screenSpaceTransform().GetInverse(&inverseScreenS paceTransform); | |
1284 DCHECK(didInvert); | |
danakj
2013/01/04 21:56:07
This is going to potentially bomb when we start im
| |
1281 | 1285 |
1282 gfx::PointF screenSpacePoint = gfx::ScalePoint(viewportPoint, scaleFromViewp ortToScreenSpace); | 1286 gfx::PointF screenSpacePoint = gfx::ScalePoint(viewportPoint, scaleFromViewp ortToScreenSpace); |
1283 | 1287 |
1284 gfx::Vector2dF screenSpaceDelta = viewportDelta; | 1288 gfx::Vector2dF screenSpaceDelta = viewportDelta; |
1285 screenSpaceDelta.Scale(scaleFromViewportToScreenSpace); | 1289 screenSpaceDelta.Scale(scaleFromViewportToScreenSpace); |
1286 | 1290 |
1287 // First project the scroll start and end points to local layer space to fin d the scroll delta | 1291 // First project the scroll start and end points to local layer space to fin d the scroll delta |
1288 // in layer coordinates. | 1292 // in layer coordinates. |
1289 bool startClipped, endClipped; | 1293 bool startClipped, endClipped; |
1290 gfx::PointF screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; | 1294 gfx::PointF screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; |
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1718 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); | 1722 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); |
1719 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); | 1723 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
1720 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1724 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
1721 m_client->setNeedsRedrawOnImplThread(); | 1725 m_client->setNeedsRedrawOnImplThread(); |
1722 | 1726 |
1723 for (size_t i = 0; i < layer->children().size(); ++i) | 1727 for (size_t i = 0; i < layer->children().size(); ++i) |
1724 animateScrollbarsRecursive(layer->children()[i], time); | 1728 animateScrollbarsRecursive(layer->children()[i], time); |
1725 } | 1729 } |
1726 | 1730 |
1727 } // namespace cc | 1731 } // namespace cc |
OLD | NEW |