12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/nine_patch_layer.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/nine_patch_layer_impl.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/prioritized_resource.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/resource_update.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/resource_update_queue.h"
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "cc/resources/scoped_ui_resource.h"
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "cc/resources/ui_resource_bitmap.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/layer_tree_host.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<NinePatchLayer> NinePatchLayer::Create() {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return make_scoped_refptr(new NinePatchLayer());
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)NinePatchLayer::NinePatchLayer() : fill_center_(false) {}
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NinePatchLayer::~NinePatchLayer() {}
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_ptr<LayerImpl> NinePatchLayer::CreateLayerImpl(
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    LayerTreeImpl* tree_impl) {
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return NinePatchLayerImpl::Create(tree_impl, id()).PassAs<LayerImpl>();
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NinePatchLayer::SetBorder(const gfx::Rect& border) {
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (border == border_)
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return;
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  border_ = border;
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  SetNeedsCommit();
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void NinePatchLayer::SetAperture(const gfx::Rect& aperture) {
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (image_aperture_ == aperture)
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return;
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  image_aperture_ = aperture;
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  SetNeedsCommit();
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void NinePatchLayer::SetFillCenter(bool fill_center) {
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (fill_center_ == fill_center)
4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return;
4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  fill_center_ = fill_center;
5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  SetNeedsCommit();
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NinePatchLayer::PushPropertiesTo(LayerImpl* layer) {
544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  UIResourceLayer::PushPropertiesTo(layer);
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NinePatchLayerImpl* layer_impl = static_cast<NinePatchLayerImpl*>(layer);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  if (!ui_resource_holder_) {
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    layer_impl->SetUIResourceId(0);
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  } else {
6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    DCHECK(layer_tree_host());
61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    layer_impl->SetLayout(image_aperture_, border_, fill_center_);
6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace cc
67