Chromium Code Reviews| Index: ui/android/resources/crushed_sprite_resource.h |
| diff --git a/ui/android/resources/crushed_sprite_resource.h b/ui/android/resources/crushed_sprite_resource.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..2122b00125863f88afe8da4e748a0d06fe879598 |
| --- /dev/null |
| +++ b/ui/android/resources/crushed_sprite_resource.h |
| @@ -0,0 +1,87 @@ |
| +// 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 UI_ANDROID_RESOURCES_CRUSHED_SPRITE_RESOURCE_H_ |
| +#define UI_ANDROID_RESOURCES_CRUSHED_SPRITE_RESOURCE_H_ |
| + |
| +#include <utility> |
| +#include <vector> |
| + |
| +#include "base/memory/ref_counted.h" |
| +#include "ui/android/ui_android_export.h" |
| +#include "ui/gfx/android/java_bitmap.h" |
|
David Trainor- moved to gerrit
2015/10/15 21:04:57
Can we forward declare this and not include it in
Theresa
2015/10/24 00:06:46
I can; I would also need to forward declare or inc
David Trainor- moved to gerrit
2015/10/27 15:14:47
I would always forward declare if you can.
Theresa
2015/10/27 19:48:02
Done.
|
| +#include "ui/gfx/geometry/rect.h" |
| + |
| +namespace ui { |
| + |
| +// A resource that provides an unscaled bitmap and corresponding metadata for a |
| +// crushed sprite. A crushed sprite animation is run by drawing rectangles from |
| +// a bitmap to a canvas. Each frame in the animation draws its rectangles on top |
| +// of the previous frame. |
| +class UI_ANDROID_EXPORT CrushedSpriteResource : |
| +public base::RefCounted<CrushedSpriteResource> { |
|
David Trainor- moved to gerrit
2015/10/15 21:04:58
Does it have to be ref counted?
Theresa
2015/10/24 00:06:45
I wanted it to get automatically destroyed when it
David Trainor- moved to gerrit
2015/10/27 15:14:47
IIRC the IDMap is set to IDMapOwnPointer so it'll
Theresa
2015/10/27 19:48:02
Done.
|
| + public: |
| + typedef std::vector<std::pair<gfx::Rect, gfx::Rect>> FrameSrcDstRects; |
| + typedef std::vector<FrameSrcDstRects> SrcDstRects; |
| + |
| + // Creates a new CrushedSpriteResource. |bitmap_res_id| is the id for the |
| + // for the source bitmap, |java_bitmap| is the source bitmap for the crushed |
| + // sprite, |src_dst_rects| is a list of rectangles to draw for each frame, and |
| + // |sprite_size| is the size of an individual sprite. |
| + static scoped_refptr<CrushedSpriteResource> CreateFromJavaBitmap( |
| + int bitmap_res_id, |
| + const gfx::JavaBitmap& java_bitmap, |
|
David Trainor- moved to gerrit
2015/10/15 21:04:58
Would it be better to hide the fact that this came
Theresa
2015/10/24 00:06:45
I modeled it off the old UIResourceAndroid https:/
David Trainor- moved to gerrit
2015/10/27 15:14:47
Acknowledged.
Theresa
2015/10/27 19:48:02
Changed to an SkBitmap
|
| + const SrcDstRects& src_dst_rects, |
| + int sprite_size); |
| + |
| + // Sets the source bitmap to |java_bitmap|. |
| + void SetBitmapFromJavaBitmap(const gfx::JavaBitmap& java_bitmap); |
| + |
| + // Returns the source bitmap. |
| + SkBitmap GetBitmap(); |
| + |
| + // Stores the bitmap for the last frame and evicts the source bitmap from |
| + // memory. This should be called when the crushed sprite animation finishes |
| + // if it is unlikely to be rerun. |
| + void SetBitmapForLastFrame(SkBitmap last_frame_bitmap); |
|
David Trainor- moved to gerrit
2015/10/15 21:04:58
I would hide a lot of this and just expose somethi
Theresa
2015/10/24 00:06:46
contextual_search_layer will call getResource each
David Trainor- moved to gerrit
2015/10/27 15:14:47
Yeah this is the downside of sharing the bitmap th
Theresa
2015/10/27 19:48:02
As discussed offline,removed the logic for caching
|
| + |
| + // Returns the bitmap for the last frame if available or an empty bitmap. |
| + SkBitmap GetBitmapForLastFrame(); |
| + |
| + // Returns true if the source bitmap has been evicted from memory. |
| + bool BitmapHasBeenEvictedFromMemory(); |
| + |
| + // Returns a list of rectangles to be drawn for |frame|. |
| + FrameSrcDstRects GetRectanglesForFrame(int frame); |
| + |
| + // Returns the size of an individual sprite. |
| + int GetSpriteSize(); |
| + |
| + // Returns the total number of frames in the sprite animation. |
| + int GetFrameCount(); |
| + |
| + // Returns the resource id for the source bitmap. |
| + int GetBitmapResourceId(); |
|
David Trainor- moved to gerrit
2015/10/15 21:04:58
Shouldn't be necessary I think?
Theresa
2015/10/24 00:06:46
This method is currently being used to reload the
|
| + |
| + private: |
| + friend class base::RefCounted<CrushedSpriteResource>; |
| + CrushedSpriteResource( |
| + int bitmap_res_id, |
| + const SkBitmap& bitmap, |
| + const SrcDstRects& src_dst_rects, |
| + int sprite_size); |
| + ~CrushedSpriteResource(); |
| + |
| + SkBitmap bitmap_; |
| + SkBitmap last_frame_bitmap_; |
|
David Trainor- moved to gerrit
2015/10/15 21:04:57
Shouldn't need?
|
| + SrcDstRects src_dst_rects_; |
| + int sprite_size_; |
| + int bitmap_res_id_; |
|
David Trainor- moved to gerrit
2015/10/15 21:04:58
We should be able to rely on the res_id from all c
Theresa
2015/10/24 00:06:45
If the call to reload the crushed sprite resource
|
| + |
| + DISALLOW_COPY_AND_ASSIGN(CrushedSpriteResource); |
| +}; |
| + |
| +} // namespace ui |
| + |
| +#endif // UI_ANDROID_RESOURCES_CRUSHED_SPRITE_RESOURCE_H_ |