Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(370)

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11308153: Migrate most of cc/ from WebKit::WebTransformationMatrix to gfx::Transform (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased to tip of tree and addressed feedback Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 18 matching lines...) Expand all
29 #include "cc/scrollbar_animation_controller.h" 29 #include "cc/scrollbar_animation_controller.h"
30 #include "cc/scrollbar_layer_impl.h" 30 #include "cc/scrollbar_layer_impl.h"
31 #include "cc/shared_quad_state.h" 31 #include "cc/shared_quad_state.h"
32 #include "cc/single_thread_proxy.h" 32 #include "cc/single_thread_proxy.h"
33 #include "cc/software_renderer.h" 33 #include "cc/software_renderer.h"
34 #include "cc/solid_color_draw_quad.h" 34 #include "cc/solid_color_draw_quad.h"
35 #include "cc/texture_uploader.h" 35 #include "cc/texture_uploader.h"
36 #include "ui/gfx/size_conversions.h" 36 #include "ui/gfx/size_conversions.h"
37 #include "ui/gfx/vector2d_conversions.h" 37 #include "ui/gfx/vector2d_conversions.h"
38 38
39 using WebKit::WebTransformationMatrix; 39 using gfx::Transform;
40 40
41 namespace { 41 namespace {
42 42
43 void didVisibilityChange(cc::LayerTreeHostImpl* id, bool visible) 43 void didVisibilityChange(cc::LayerTreeHostImpl* id, bool visible)
44 { 44 {
45 if (visible) { 45 if (visible) {
46 TRACE_EVENT_ASYNC_BEGIN1("webkit", "LayerTreeHostImpl::setVisible", id, "LayerTreeHostImpl", id); 46 TRACE_EVENT_ASYNC_BEGIN1("webkit", "LayerTreeHostImpl::setVisible", id, "LayerTreeHostImpl", id);
47 return; 47 return;
48 } 48 }
49 49
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 128
129 if (pinchedBounds.bottom() > m_layoutViewportSize.height()) { 129 if (pinchedBounds.bottom() > m_layoutViewportSize.height()) {
130 overflow.set_y(pinchedBounds.bottom() - m_layoutViewportSize.height()); 130 overflow.set_y(pinchedBounds.bottom() - m_layoutViewportSize.height());
131 pinchedBounds += gfx::Vector2dF(0, m_layoutViewportSize.height() - pinch edBounds.bottom()); 131 pinchedBounds += gfx::Vector2dF(0, m_layoutViewportSize.height() - pinch edBounds.bottom());
132 } 132 }
133 m_zoomedViewportOffset = pinchedBounds.OffsetFromOrigin(); 133 m_zoomedViewportOffset = pinchedBounds.OffsetFromOrigin();
134 134
135 return overflow; 135 return overflow;
136 } 136 }
137 137
138 WebTransformationMatrix PinchZoomViewport::implTransform(bool pageScalePinchZoom Enabled) const 138 Transform PinchZoomViewport::implTransform(bool pageScalePinchZoomEnabled) const
139 { 139 {
140 WebTransformationMatrix transform; 140 Transform transform;
141 transform.scale(m_pageScaleDelta); 141 transform.PreconcatScale(m_pageScaleDelta, m_pageScaleDelta);
142 142
143 // If the pinch state is applied in the impl, then push it to the 143 // If the pinch state is applied in the impl, then push it to the
144 // impl transform, otherwise the scale is handled by WebCore. 144 // impl transform, otherwise the scale is handled by WebCore.
145 if (pageScalePinchZoomEnabled) { 145 if (pageScalePinchZoomEnabled) {
146 transform.scale(m_pageScaleFactor); 146 transform.PreconcatScale(m_pageScaleFactor, m_pageScaleFactor);
147 // The offset needs to be scaled by deviceScaleFactor as this transform 147 // The offset needs to be scaled by deviceScaleFactor as this transform
148 // needs to work with physical pixels. 148 // needs to work with physical pixels.
149 gfx::Vector2dF zoomedDeviceViewportOffset = gfx::ScaleVector2d(m_zoomedV iewportOffset, m_deviceScaleFactor); 149 gfx::Vector2dF zoomedDeviceViewportOffset = gfx::ScaleVector2d(m_zoomedV iewportOffset, m_deviceScaleFactor);
150 transform.translate(-zoomedDeviceViewportOffset.x(), -zoomedDeviceViewpo rtOffset.y()); 150 transform.PreconcatTranslate(-zoomedDeviceViewportOffset.x(), -zoomedDev iceViewportOffset.y());
151 } 151 }
152 152
153 return transform; 153 return transform;
154 } 154 }
155 155
156 class LayerTreeHostImplTimeSourceAdapter : public TimeSourceClient { 156 class LayerTreeHostImplTimeSourceAdapter : public TimeSourceClient {
157 public: 157 public:
158 static scoped_ptr<LayerTreeHostImplTimeSourceAdapter> create(LayerTreeHostIm pl* layerTreeHostImpl, scoped_refptr<DelayBasedTimeSource> timeSource) 158 static scoped_ptr<LayerTreeHostImplTimeSourceAdapter> create(LayerTreeHostIm pl* layerTreeHostImpl, scoped_refptr<DelayBasedTimeSource> timeSource)
159 { 159 {
160 return make_scoped_ptr(new LayerTreeHostImplTimeSourceAdapter(layerTreeH ostImpl, timeSource)); 160 return make_scoped_ptr(new LayerTreeHostImplTimeSourceAdapter(layerTreeH ostImpl, timeSource));
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 targetRenderPass->shared_quad_state_list, 441 targetRenderPass->shared_quad_state_list,
442 rootLayer, 442 rootLayer,
443 occlusionTracker, 443 occlusionTracker,
444 rootLayer->showDebugBorders(), 444 rootLayer->showDebugBorders(),
445 forSurface); 445 forSurface);
446 446
447 // Manually create the quad state for the gutter quads, as the root layer 447 // Manually create the quad state for the gutter quads, as the root layer
448 // doesn't have any bounds and so can't generate this itself. 448 // doesn't have any bounds and so can't generate this itself.
449 // FIXME: Make the gutter quads generated by the solid color layer (make it smarter about generating quads to fill unoccluded areas). 449 // FIXME: Make the gutter quads generated by the solid color layer (make it smarter about generating quads to fill unoccluded areas).
450 450
451 DCHECK(rootLayer->screenSpaceTransform().isInvertible()); 451 DCHECK(rootLayer->screenSpaceTransform().IsInvertible());
452 452
453 gfx::Rect rootTargetRect = rootLayer->renderSurface()->contentRect(); 453 gfx::Rect rootTargetRect = rootLayer->renderSurface()->contentRect();
454 float opacity = 1; 454 float opacity = 1;
455 SharedQuadState* sharedQuadState = quadCuller.useSharedQuadState(SharedQuadS tate::Create()); 455 SharedQuadState* sharedQuadState = quadCuller.useSharedQuadState(SharedQuadS tate::Create());
456 sharedQuadState->SetAll(rootLayer->drawTransform(), 456 sharedQuadState->SetAll(rootLayer->drawTransform(),
457 rootTargetRect, 457 rootTargetRect,
458 rootTargetRect, 458 rootTargetRect,
459 rootTargetRect, 459 rootTargetRect,
460 false, 460 false,
461 opacity); 461 opacity);
462 462
463 AppendQuadsData appendQuadsData; 463 AppendQuadsData appendQuadsData;
464 WebTransformationMatrix transformToLayerSpace = rootLayer->screenSpaceTransf orm().inverse(); 464 Transform transformToLayerSpace = MathUtil::inverse(rootLayer->screenSpaceTr ansform());
465 for (Region::Iterator fillRects(fillRegion); fillRects.has_rect(); fillRects .next()) { 465 for (Region::Iterator fillRects(fillRegion); fillRects.has_rect(); fillRects .next()) {
466 // The root layer transform is composed of translations and scales only, 466 // The root layer transform is composed of translations and scales only,
467 // no perspective, so mapping is sufficient. 467 // no perspective, so mapping is sufficient.
468 gfx::Rect layerRect = MathUtil::mapClippedRect(transformToLayerSpace, fi llRects.rect()); 468 gfx::Rect layerRect = MathUtil::mapClippedRect(transformToLayerSpace, fi llRects.rect());
469 // Skip the quad culler and just append the quads directly to avoid 469 // Skip the quad culler and just append the quads directly to avoid
470 // occlusion checks. 470 // occlusion checks.
471 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); 471 scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create();
472 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); 472 quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor);
473 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData); 473 quadCuller.append(quad.PassAs<DrawQuad>(), appendQuadsData);
474 } 474 }
(...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 m_numImplThreadScrolls++; 1191 m_numImplThreadScrolls++;
1192 return ScrollStarted; 1192 return ScrollStarted;
1193 } 1193 }
1194 return ScrollIgnored; 1194 return ScrollIgnored;
1195 } 1195 }
1196 1196
1197 static gfx::Vector2dF scrollLayerWithViewportSpaceDelta(PinchZoomViewport* viewp ort, LayerImpl& layerImpl, float scaleFromViewportToScreenSpace, gfx::PointF vie wportPoint, gfx::Vector2dF viewportDelta) 1197 static gfx::Vector2dF scrollLayerWithViewportSpaceDelta(PinchZoomViewport* viewp ort, LayerImpl& layerImpl, float scaleFromViewportToScreenSpace, gfx::PointF vie wportPoint, gfx::Vector2dF viewportDelta)
1198 { 1198 {
1199 // Layers with non-invertible screen space transforms should not have passed the scroll hit 1199 // Layers with non-invertible screen space transforms should not have passed the scroll hit
1200 // test in the first place. 1200 // test in the first place.
1201 DCHECK(layerImpl.screenSpaceTransform().isInvertible()); 1201 DCHECK(layerImpl.screenSpaceTransform().IsInvertible());
1202 WebTransformationMatrix inverseScreenSpaceTransform = layerImpl.screenSpaceT ransform().inverse(); 1202 Transform inverseScreenSpaceTransform = MathUtil::inverse(layerImpl.screenSp aceTransform());
1203 1203
1204 gfx::PointF screenSpacePoint = gfx::ScalePoint(viewportPoint, scaleFromViewp ortToScreenSpace); 1204 gfx::PointF screenSpacePoint = gfx::ScalePoint(viewportPoint, scaleFromViewp ortToScreenSpace);
1205 1205
1206 gfx::Vector2dF screenSpaceDelta = viewportDelta; 1206 gfx::Vector2dF screenSpaceDelta = viewportDelta;
1207 screenSpaceDelta.Scale(scaleFromViewportToScreenSpace); 1207 screenSpaceDelta.Scale(scaleFromViewportToScreenSpace);
1208 1208
1209 // First project the scroll start and end points to local layer space to fin d the scroll delta 1209 // First project the scroll start and end points to local layer space to fin d the scroll delta
1210 // in layer coordinates. 1210 // in layer coordinates.
1211 bool startClipped, endClipped; 1211 bool startClipped, endClipped;
1212 gfx::PointF screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; 1212 gfx::PointF screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta;
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
1455 return scrollInfo.Pass(); 1455 return scrollInfo.Pass();
1456 } 1456 }
1457 1457
1458 collectScrollDeltas(scrollInfo.get(), m_rootLayerImpl.get()); 1458 collectScrollDeltas(scrollInfo.get(), m_rootLayerImpl.get());
1459 scrollInfo->pageScaleDelta = m_pinchZoomViewport.pageScaleDelta(); 1459 scrollInfo->pageScaleDelta = m_pinchZoomViewport.pageScaleDelta();
1460 m_pinchZoomViewport.setSentPageScaleDelta(scrollInfo->pageScaleDelta); 1460 m_pinchZoomViewport.setSentPageScaleDelta(scrollInfo->pageScaleDelta);
1461 1461
1462 return scrollInfo.Pass(); 1462 return scrollInfo.Pass();
1463 } 1463 }
1464 1464
1465 WebTransformationMatrix LayerTreeHostImpl::implTransform() const 1465 Transform LayerTreeHostImpl::implTransform() const
1466 { 1466 {
1467 return m_pinchZoomViewport.implTransform(m_settings.pageScalePinchZoomEnable d); 1467 return m_pinchZoomViewport.implTransform(m_settings.pageScalePinchZoomEnable d);
1468 } 1468 }
1469 1469
1470 void LayerTreeHostImpl::setFullRootLayerDamage() 1470 void LayerTreeHostImpl::setFullRootLayerDamage()
1471 { 1471 {
1472 if (m_rootLayerImpl) { 1472 if (m_rootLayerImpl) {
1473 RenderSurfaceImpl* renderSurface = m_rootLayerImpl->renderSurface(); 1473 RenderSurfaceImpl* renderSurface = m_rootLayerImpl->renderSurface();
1474 if (renderSurface) 1474 if (renderSurface)
1475 renderSurface->damageTracker()->forceFullDamageNextUpdate(); 1475 renderSurface->damageTracker()->forceFullDamageNextUpdate();
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1596 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); 1596 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController();
1597 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); 1597 double monotonicTime = (time - base::TimeTicks()).InSecondsF();
1598 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1598 if (scrollbarController && scrollbarController->animate(monotonicTime))
1599 m_client->setNeedsRedrawOnImplThread(); 1599 m_client->setNeedsRedrawOnImplThread();
1600 1600
1601 for (size_t i = 0; i < layer->children().size(); ++i) 1601 for (size_t i = 0; i < layer->children().size(); ++i)
1602 animateScrollbarsRecursive(layer->children()[i], time); 1602 animateScrollbarsRecursive(layer->children()[i], time);
1603 } 1603 }
1604 1604
1605 } // namespace cc 1605 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698