Skia
2D Graphics Library
|
If a client wants to control the allocation of raster layers in a canvas, it should subclass SkRasterHandleAllocator. More...
#include <SkRasterHandleAllocator.h>
Classes | |
struct | Rec |
Public Types | |
typedef void * | Handle |
Public Member Functions | |
virtual | ~SkRasterHandleAllocator ()=default |
virtual bool | allocHandle (const SkImageInfo &, Rec *)=0 |
Given a requested info, allocate the corresponding pixels/rowbytes, and whatever handle is desired to give clients access to those pixels. More... | |
virtual void | updateHandle (Handle, const SkMatrix &, const SkIRect &)=0 |
Clients access the handle for a given layer by calling SkCanvas::accessTopRasterHandle(). More... | |
Static Public Member Functions | |
static std::unique_ptr< SkCanvas > | MakeCanvas (std::unique_ptr< SkRasterHandleAllocator >, const SkImageInfo &, const Rec *rec=nullptr, const SkSurfaceProps *props=nullptr) |
This creates a canvas which will use the allocator to manage pixel allocations, including all calls to saveLayer(). More... | |
Protected Member Functions | |
SkRasterHandleAllocator ()=default | |
SkRasterHandleAllocator (const SkRasterHandleAllocator &)=delete | |
SkRasterHandleAllocator & | operator= (const SkRasterHandleAllocator &)=delete |
Friends | |
class | SkBitmapDevice |
If a client wants to control the allocation of raster layers in a canvas, it should subclass SkRasterHandleAllocator.
This allocator performs two tasks:
This example allocates a canvas, and defers to the allocator to create the base layer.
std::unique_ptr<SkCanvas> canvas = SkRasterHandleAllocator::MakeCanvas( SkImageInfo::Make(...), std::make_unique<MySubclassRasterHandleAllocator>(...), nullptr);
If you have already allocated the base layer (and its handle, release-proc etc.) then you can pass those in using the last parameter to MakeCanvas().
Regardless of how the base layer is allocated, each time canvas->saveLayer() is called, your allocator's allocHandle() will be called.
typedef void* SkRasterHandleAllocator::Handle |
|
virtualdefault |
|
protecteddefault |
|
protecteddelete |
|
pure virtual |
Given a requested info, allocate the corresponding pixels/rowbytes, and whatever handle is desired to give clients access to those pixels.
The rec also contains a proc and context which will be called when this allocation goes out of scope.
e.g. when canvas->saveLayer() is called, the allocator will be called to allocate the pixels for the layer. When canvas->restore() is called, the fReleaseProc will be called.
|
static |
This creates a canvas which will use the allocator to manage pixel allocations, including all calls to saveLayer().
If rec is non-null, then it will be used as the base-layer of pixels/handle. If rec is null, then the allocator will be called for the base-layer as well.
|
protecteddelete |
|
pure virtual |
Clients access the handle for a given layer by calling SkCanvas::accessTopRasterHandle().
To allow the handle to reflect the current matrix/clip in the canvs, updateHandle() is is called. The subclass is responsible to update the handle as it sees fit.
|
friend |