| Index: cc/nine_patch_layer.cc
|
| diff --git a/cc/nine_patch_layer.cc b/cc/nine_patch_layer.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8ad31742a094364aee92b1752af3906d5f533a4f
|
| --- /dev/null
|
| +++ b/cc/nine_patch_layer.cc
|
| @@ -0,0 +1,99 @@
|
| +// Copyright 2012 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 "config.h"
|
| +
|
| +#include "cc/nine_patch_layer.h"
|
| +
|
| +#include "cc/layer_tree_host.h"
|
| +#include "cc/nine_patch_layer_impl.h"
|
| +#include "cc/resource_update.h"
|
| +#include "cc/resource_update_queue.h"
|
| +
|
| +namespace cc {
|
| +
|
| +scoped_refptr<NinePatchLayer> NinePatchLayer::create()
|
| +{
|
| + return make_scoped_refptr(new NinePatchLayer());
|
| +}
|
| +
|
| +NinePatchLayer::NinePatchLayer()
|
| + : m_bitmapDirty(false)
|
| +{
|
| +}
|
| +
|
| +NinePatchLayer::~NinePatchLayer()
|
| +{
|
| +}
|
| +
|
| +scoped_ptr<LayerImpl> NinePatchLayer::createLayerImpl()
|
| +{
|
| + return NinePatchLayerImpl::create(id()).PassAs<LayerImpl>();
|
| +}
|
| +
|
| +void NinePatchLayer::setTexturePriorities(const PriorityCalculator& priorityCalc)
|
| +{
|
| + if (m_needsDisplay && m_bitmapDirty && drawsContent()) {
|
| + DCHECK(!m_bitmap.isNull());
|
| + createUpdaterIfNeeded();
|
| + m_updater->setBitmap(m_bitmap);
|
| + m_needsDisplay = false;
|
| +
|
| + if (!m_resource)
|
| + m_resource = m_updater->createResource(layerTreeHost()->contentsTextureManager());
|
| + }
|
| +
|
| + if (m_resource) {
|
| + m_resource->texture()->setRequestPriority(PriorityCalculator::uiPriority(true));
|
| + // FIXME: Need to support swizzle in the shader for !PlatformColor::sameComponentOrder(textureFormat)
|
| + GLenum textureFormat = layerTreeHost()->rendererCapabilities().bestTextureFormat;
|
| + m_resource->texture()->setDimensions(gfx::Size(m_bitmap.width(), m_bitmap.height()), textureFormat);
|
| + }
|
| +}
|
| +
|
| +void NinePatchLayer::setBitmap(const SkBitmap& bitmap, const gfx::Rect& aperture) {
|
| + m_bitmap = bitmap;
|
| + m_imageAperture = aperture;
|
| + m_bitmapDirty = true;
|
| + setNeedsDisplay();
|
| +}
|
| +
|
| +void NinePatchLayer::update(ResourceUpdateQueue& queue, const OcclusionTracker* occlusion, RenderingStats& stats)
|
| +{
|
| + createUpdaterIfNeeded();
|
| +
|
| + if (m_resource && (m_bitmapDirty || m_resource->texture()->backingResourceWasEvicted())) {
|
| + gfx::Rect contentRect(gfx::Point(), gfx::Size(m_bitmap.width(), m_bitmap.height()));
|
| + ResourceUpdate upload = ResourceUpdate::Create(m_resource->texture(), &m_bitmap, contentRect, contentRect, gfx::Vector2d());
|
| + queue.appendFullUpload(upload);
|
| + m_bitmapDirty = false;
|
| + }
|
| +}
|
| +
|
| +void NinePatchLayer::createUpdaterIfNeeded()
|
| +{
|
| + if (m_updater)
|
| + return;
|
| +
|
| + m_updater = ImageLayerUpdater::create();
|
| +}
|
| +
|
| +bool NinePatchLayer::drawsContent() const
|
| +{
|
| + bool draws = !m_bitmap.isNull() && Layer::drawsContent() && m_bitmap.width() && m_bitmap.height();
|
| + return draws;
|
| +}
|
| +
|
| +void NinePatchLayer::pushPropertiesTo(LayerImpl* layer)
|
| +{
|
| + Layer::pushPropertiesTo(layer);
|
| + NinePatchLayerImpl* layerImpl = static_cast<NinePatchLayerImpl*>(layer);
|
| +
|
| + DCHECK(!m_bitmap.isNull());
|
| + DCHECK(m_resource);
|
| + layerImpl->setResourceId(m_resource->texture()->resourceId());
|
| + layerImpl->setLayout(gfx::Size(m_bitmap.width(), m_bitmap.height()), m_imageAperture);
|
| +}
|
| +
|
| +}
|
|
|