Chromium Code Reviews| 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 |