blob: 7c01738dd60d74b0a4a8c41b544688a5b9614af6 [file] [log] [blame]
/*
* Copyright 2014 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "SkCanvas.h"
#include "SkCanvasDrawable.h"
#include "SkThread.h"
static int32_t next_generation_id() {
static int32_t gCanvasDrawableGenerationID;
// do a loop in case our global wraps around, as we never want to
// return a 0
int32_t genID;
do {
genID = sk_atomic_inc(&gCanvasDrawableGenerationID) + 1;
} while (0 == genID);
return genID;
}
SkCanvasDrawable::SkCanvasDrawable() : fGenerationID(0) {}
void SkCanvasDrawable::draw(SkCanvas* canvas) {
SkAutoCanvasRestore acr(canvas, true);
this->onDraw(canvas);
}
uint32_t SkCanvasDrawable::getGenerationID() {
if (0 == fGenerationID) {
fGenerationID = next_generation_id();
}
return fGenerationID;
}
bool SkCanvasDrawable::getBounds(SkRect* boundsPtr) {
SkRect bounds;
if (!boundsPtr) {
boundsPtr = &bounds;
}
return this->onGetBounds(boundsPtr);
}
void SkCanvasDrawable::notifyDrawingChanged() {
fGenerationID = 0;
}