// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "cc/layers/surface_layer.h"

#include "cc/layers/surface_layer_impl.h"

namespace cc {

scoped_refptr<SurfaceLayer> SurfaceLayer::Create() {
  return make_scoped_refptr(new SurfaceLayer);
}

SurfaceLayer::SurfaceLayer() : Layer() {
}

SurfaceLayer::~SurfaceLayer() {}

void SurfaceLayer::SetSurfaceId(SurfaceId surface_id) {
  surface_id_ = surface_id;
  UpdateDrawsContent(HasDrawableContent());
  SetNeedsPushProperties();
}

scoped_ptr<LayerImpl> SurfaceLayer::CreateLayerImpl(LayerTreeImpl* tree_impl) {
  return SurfaceLayerImpl::Create(tree_impl, id());
}

bool SurfaceLayer::HasDrawableContent() const {
  return !surface_id_.is_null() && Layer::HasDrawableContent();
}

void SurfaceLayer::PushPropertiesTo(LayerImpl* layer) {
  Layer::PushPropertiesTo(layer);
  SurfaceLayerImpl* layer_impl = static_cast<SurfaceLayerImpl*>(layer);

  layer_impl->SetSurfaceId(surface_id_);
}

}  // namespace cc
