blob: ea7676a1c39a7c93a907cecb3113b8f69570b02d [file] [log] [blame]
// Copyright 2015 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.
#ifndef CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_CRUSHED_SPRITE_LAYER_H_
#define CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_CRUSHED_SPRITE_LAYER_H_
#include "base/macros.h"
#include "chrome/browser/android/compositor/layer/layer.h"
namespace cc {
class UIResourceLayer;
}
namespace ui {
class CrushedSpriteResource;
class ResourceManager;
}
namespace chrome {
namespace android {
// A layer which manages drawing frames from a CrushedSpriteResource into an
// SkCanvas backed by an SkBitmap. The final SkBitmap is passed to a
// UIResourceLayer for display.
class CrushedSpriteLayer : public Layer {
public:
static scoped_refptr<CrushedSpriteLayer> Create();
// Loads the resource, calculates the sprite frame to display based on
// |completion_percentage|, draws the rectangles for the frame on top
// of the previous frame and sends to layer_ for display.
void DrawSpriteFrame(ui::ResourceManager* resource_manager,
int bitmap_res_id,
int metadata_res_id,
float completion_percentage);
// Layer overrides.
scoped_refptr<cc::Layer> layer() override;
protected:
CrushedSpriteLayer();
~CrushedSpriteLayer() override;
private:
// Draws the rectangles for |frame| to |canvas|.
void DrawRectanglesForFrame(ui::CrushedSpriteResource* resource,
int frame,
skia::RefPtr<SkCanvas> canvas);
scoped_refptr<cc::UIResourceLayer> layer_;
int frame_count_;
int previous_frame_;
SkBitmap previous_frame_bitmap_;
DISALLOW_COPY_AND_ASSIGN(CrushedSpriteLayer);
};
} // namespace android
} // namespace chrome
#endif // CHROME_BROWSER_ANDROID_COMPOSITOR_LAYER_CRUSHED_SPRITE_LAYER_H_