Index: ui/compositor/layer.cc |
diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc |
index 5e5ebcb95a7bd577e18d170fa373af0aa25a0e27..ad3c31cc33538e56ae91737a9f9a57b588977d19 100644 |
--- a/ui/compositor/layer.cc |
+++ b/ui/compositor/layer.cc |
@@ -425,11 +425,9 @@ bool Layer::GetTargetTransformRelativeTo(const Layer* ancestor, |
// static |
gfx::Transform Layer::ConvertTransformToCCTransform( |
const gfx::Transform& transform, |
- const gfx::Rect& bounds, |
float device_scale_factor) { |
gfx::Transform cc_transform; |
cc_transform.Scale(device_scale_factor, device_scale_factor); |
- cc_transform.Translate(bounds.x(), bounds.y()); |
cc_transform.PreconcatTransform(transform); |
cc_transform.Scale(1.0f / device_scale_factor, 1.0f / device_scale_factor); |
return cc_transform; |
@@ -463,6 +461,7 @@ void Layer::SwitchToLayer(scoped_refptr<cc::Layer> new_layer) { |
cc_layer_->RemoveLayerAnimationEventObserver(this); |
new_layer->SetOpacity(cc_layer_->opacity()); |
new_layer->SetTransform(cc_layer_->transform()); |
+ new_layer->SetPosition(cc_layer_->position()); |
cc_layer_= new_layer; |
content_layer_ = NULL; |
@@ -601,6 +600,7 @@ void Layer::OnDeviceScaleFactorChanged(float device_scale_factor) { |
device_scale_factor_ = device_scale_factor; |
RecomputeCCTransformFromTransform(transform); |
RecomputeDrawsContentAndUVRect(); |
+ RecomputePosition(); |
SchedulePaint(gfx::Rect(bounds_.size())); |
if (delegate_) |
delegate_->OnDeviceScaleFactorChanged(device_scale_factor); |
@@ -704,11 +704,11 @@ void Layer::SetBoundsImmediately(const gfx::Rect& bounds) { |
if (delegate_) |
closure = delegate_->PrepareForLayerBoundsChange(); |
bool was_move = bounds_.size() == bounds.size(); |
- gfx::Transform transform = this->transform(); |
bounds_ = bounds; |
- RecomputeCCTransformFromTransform(transform); |
RecomputeDrawsContentAndUVRect(); |
+ RecomputePosition(); |
+ |
if (!closure.is_null()) |
closure.Run(); |
@@ -891,17 +891,16 @@ void Layer::CreateWebLayer() { |
cc_layer_->SetContentsOpaque(true); |
cc_layer_->SetIsDrawable(type_ != LAYER_NOT_DRAWN); |
cc_layer_->AddLayerAnimationEventObserver(this); |
+ RecomputePosition(); |
} |
void Layer::RecomputeCCTransformFromTransform(const gfx::Transform& transform) { |
cc_layer_->SetTransform(ConvertTransformToCCTransform(transform, |
- bounds_, |
device_scale_factor_)); |
} |
gfx::Transform Layer::transform() const { |
gfx::Transform transform; |
- transform.Translate(-bounds_.x(), -bounds_.y()); |
transform.Scale(1.0f / device_scale_factor_, 1.0f / device_scale_factor_); |
transform.PreconcatTransform(cc_layer_->transform()); |
transform.Scale(device_scale_factor_, device_scale_factor_); |
@@ -932,4 +931,10 @@ void Layer::RecomputeDrawsContentAndUVRect() { |
cc_layer_->SetBounds(ConvertSizeToPixel(this, size)); |
} |
+void Layer::RecomputePosition() { |
+ cc_layer_->SetPosition(gfx::ScalePoint( |
+ gfx::PointF(bounds_.x(), bounds_.y()), |
+ device_scale_factor_)); |
+} |
+ |
} // namespace ui |