#ifndef SKIA_EXT_ANALYSIS_CANVAS_H_
#define SKIA_EXT_ANALYSIS_CANVAS_H_
#include "base/compiler_specific.h"
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkPicture.h"
namespace skia {
class SK_API AnalysisCanvas : public SkCanvas, public SkDrawPictureCallback {
public:
AnalysisCanvas(int width, int height);
virtual ~AnalysisCanvas();
bool GetColorIfSolid(SkColor* color) const;
bool HasText() const;
void SetForceNotSolid(bool flag);
void SetForceNotTransparent(bool flag);
virtual bool abortDrawing() OVERRIDE;
virtual void clear(SkColor) OVERRIDE;
virtual void drawPaint(const SkPaint& paint) OVERRIDE;
virtual void drawPoints(PointMode,
size_t count,
const SkPoint pts[],
const SkPaint&) OVERRIDE;
virtual void drawOval(const SkRect&, const SkPaint&) OVERRIDE;
virtual void drawRect(const SkRect&, const SkPaint&) OVERRIDE;
virtual void drawRRect(const SkRRect&, const SkPaint&) OVERRIDE;
virtual void drawPath(const SkPath& path, const SkPaint&) OVERRIDE;
virtual void drawBitmap(const SkBitmap&,
SkScalar left,
SkScalar top,
const SkPaint* paint = NULL) OVERRIDE;
virtual void drawBitmapRectToRect(const SkBitmap&,
const SkRect* src,
const SkRect& dst,
const SkPaint* paint,
DrawBitmapRectFlags flags) OVERRIDE;
virtual void drawBitmapMatrix(const SkBitmap&,
const SkMatrix&,
const SkPaint* paint = NULL) OVERRIDE;
virtual void drawBitmapNine(const SkBitmap& bitmap,
const SkIRect& center,
const SkRect& dst,
const SkPaint* paint = NULL) OVERRIDE;
virtual void drawSprite(const SkBitmap&, int left, int top,
const SkPaint* paint = NULL) OVERRIDE;
virtual void drawText(const void* text,
size_t byteLength,
SkScalar x,
SkScalar y,
const SkPaint&) OVERRIDE;
virtual void drawPosText(const void* text,
size_t byteLength,
const SkPoint pos[],
const SkPaint&) OVERRIDE;
virtual void drawPosTextH(const void* text,
size_t byteLength,
const SkScalar xpos[],
SkScalar constY,
const SkPaint&) OVERRIDE;
virtual void drawTextOnPath(const void* text,
size_t byteLength,
const SkPath& path,
const SkMatrix* matrix,
const SkPaint&) OVERRIDE;
virtual void drawVertices(VertexMode,
int vertexCount,
const SkPoint vertices[],
const SkPoint texs[],
const SkColor colors[],
SkXfermode*,
const uint16_t indices[],
int indexCount,
const SkPaint&) OVERRIDE;
protected:
virtual void willSave(SaveFlags) OVERRIDE;
virtual SaveLayerStrategy willSaveLayer(const SkRect*,
const SkPaint*,
SaveFlags) OVERRIDE;
virtual void willRestore() OVERRIDE;
virtual void onClipRect(const SkRect& rect,
SkRegion::Op op,
ClipEdgeStyle edge_style) OVERRIDE;
virtual void onClipRRect(const SkRRect& rrect,
SkRegion::Op op,
ClipEdgeStyle edge_style) OVERRIDE;
virtual void onClipPath(const SkPath& path,
SkRegion::Op op,
ClipEdgeStyle edge_style) OVERRIDE;
private:
typedef SkCanvas INHERITED;
int saved_stack_size_;
int force_not_solid_stack_level_;
int force_not_transparent_stack_level_;
bool is_forced_not_solid_;
bool is_forced_not_transparent_;
bool is_solid_color_;
SkColor color_;
bool is_transparent_;
bool has_text_;
};
}
#endif