add test for rotated saveLayer, to see that we clip against the specified bounds
(hint: we don't at the moment) git-svn-id: http://skia.googlecode.com/svn/trunk@5794 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
ae09f2dc3f
commit
4837724a7e
76
gm/savelayer.cpp
Normal file
76
gm/savelayer.cpp
Normal file
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Copyright 2012 Google Inc.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license that can be
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
|
||||
#include "gm.h"
|
||||
#include "SkCanvas.h"
|
||||
|
||||
// This should be on SkCanvas imho
|
||||
static void rotateAbout(SkCanvas* canvas, SkScalar degrees,
|
||||
SkScalar px, SkScalar py) {
|
||||
canvas->translate(px, py);
|
||||
canvas->rotate(degrees);
|
||||
canvas->translate(-px, -py);
|
||||
}
|
||||
|
||||
class SaveLayerGM : public skiagm::GM {
|
||||
void drawStuff(SkCanvas* canvas, const SkRect& r) {
|
||||
SkPaint paint;
|
||||
paint.setAntiAlias(true);
|
||||
canvas->drawOval(r, paint);
|
||||
}
|
||||
|
||||
public:
|
||||
SaveLayerGM() {}
|
||||
|
||||
protected:
|
||||
SkString onShortName() {
|
||||
return SkString("savelayer");
|
||||
}
|
||||
|
||||
virtual SkISize onISize() { return SkISize::Make(100, 100); }
|
||||
|
||||
virtual void onDraw(SkCanvas* canvas) {
|
||||
SkPaint hairpaint;
|
||||
hairpaint.setAntiAlias(true);
|
||||
hairpaint.setStyle(SkPaint::kStroke_Style);
|
||||
hairpaint.setColor(SK_ColorRED);
|
||||
|
||||
canvas->translate(50, 50);
|
||||
|
||||
SkRect r = SkRect::MakeWH(100, 60);
|
||||
SkRect r2 = r;
|
||||
r2.inset(5, 5);
|
||||
|
||||
this->drawStuff(canvas, r);
|
||||
canvas->drawRect(r, hairpaint);
|
||||
canvas->translate(r.width() * 5/4, 0);
|
||||
|
||||
canvas->saveLayer(&r2, NULL);
|
||||
this->drawStuff(canvas, r);
|
||||
canvas->restore();
|
||||
canvas->drawRect(r, hairpaint);
|
||||
canvas->translate(r.width() * 5/4, 0);
|
||||
|
||||
// We need to ensure that we still clip against r2 (after it is rotated)
|
||||
// even though the layer's bounds will be larger (since they are the
|
||||
// enclosing rect of rotated-r2).
|
||||
|
||||
rotateAbout(canvas, 30, r.centerX(), r.centerY());
|
||||
canvas->saveLayer(&r2, NULL);
|
||||
this->drawStuff(canvas, r);
|
||||
canvas->restore();
|
||||
canvas->drawRect(r, hairpaint);
|
||||
}
|
||||
|
||||
private:
|
||||
typedef GM INHERITED;
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static skiagm::GM* MyFactory(void*) { return new SaveLayerGM; }
|
||||
static skiagm::GMRegistry reg(MyFactory);
|
@ -57,6 +57,7 @@
|
||||
'../gm/poly2poly.cpp',
|
||||
'../gm/quadpaths.cpp',
|
||||
'../gm/samplerstress.cpp',
|
||||
'../gm/savelayer.cpp',
|
||||
'../gm/shaderbounds.cpp',
|
||||
'../gm/shadertext.cpp',
|
||||
'../gm/shadows.cpp',
|
||||
|
Loading…
Reference in New Issue
Block a user