| Index: src/core/SkMiniRecorder.h
|
| diff --git a/src/core/SkMiniRecorder.h b/src/core/SkMiniRecorder.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d01aedaceac249d31b4f0b32cd001ef2c0c83884
|
| --- /dev/null
|
| +++ b/src/core/SkMiniRecorder.h
|
| @@ -0,0 +1,44 @@
|
| +/*
|
| + * Copyright 2015 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef SkMiniRecorder_DEFINED
|
| +#define SkMiniRecorder_DEFINED
|
| +
|
| +#include "SkRecords.h"
|
| +#include "SkScalar.h"
|
| +#include "SkTypes.h"
|
| +class SkCanvas;
|
| +
|
| +// Records small pictures, but only a limited subset of the canvas API, and may fail.
|
| +class SkMiniRecorder : SkNoncopyable {
|
| +public:
|
| + SkMiniRecorder();
|
| + ~SkMiniRecorder();
|
| +
|
| + // Try to record an op. Returns false on failure.
|
| + bool drawPath(const SkPath&, const SkPaint&);
|
| + bool drawRect(const SkRect&, const SkPaint&);
|
| + bool drawTextBlob(const SkTextBlob*, SkScalar x, SkScalar y, const SkPaint&);
|
| +
|
| + // Detach anything we've recorded as a picture, resetting this SkMiniRecorder.
|
| + SkPicture* detachAsPicture(const SkRect& cull);
|
| +
|
| +private:
|
| + enum class State { kEmpty, kDrawPath, kDrawRect, kDrawTextBlob };
|
| +
|
| + State fState;
|
| +
|
| + template <size_t A, size_t B>
|
| + struct Max { static const size_t val = A > B ? A : B; };
|
| +
|
| + static const size_t kInlineStorage = Max<sizeof(SkRecords::DrawPath),
|
| + Max<sizeof(SkRecords::DrawRect),
|
| + sizeof(SkRecords::DrawTextBlob)>::val>::val;
|
| + SkAlignedSStorage<kInlineStorage> fBuffer;
|
| +};
|
| +
|
| +#endif//SkMiniRecorder_DEFINED
|
|
|