if (fFlags & kRotate_Flag) {
const SkScalar x = SkIntToScalar(dim.fWidth) / 2;
const SkScalar y = SkIntToScalar(dim.fHeight) / 2;
-
- canvas->translate(x, y);
- canvas->rotate(SkIntToScalar(35));
- canvas->translate(-x, -y);
+ canvas->rotate(SkIntToScalar(35), x, y);
}
INHERITED::onDraw(loops, canvas);
}
return SkISize::Make(1024, 768);
}
- static void rotate_about(SkCanvas* canvas,
- SkScalar degrees,
- SkScalar px, SkScalar py) {
- canvas->translate(px, py);
- canvas->rotate(degrees);
- canvas->translate(-px, -py);
- }
-
virtual void onDraw(SkCanvas* inputCanvas) override {
SkScalar textSizes[] = { 9.0f, 9.0f*2.0f, 9.0f*5.0f, 9.0f*2.0f*5.0f };
SkScalar scales[] = { 2.0f*5.0f, 5.0f, 2.0f, 1.0f };
SkAutoCanvasRestore acr(canvas, true);
canvas->translate(SkIntToScalar(10 + i * 200), -80);
- rotate_about(canvas, SkIntToScalar(i * 5), rotX, rotY);
+ canvas->rotate(SkIntToScalar(i * 5), rotX, rotY);
for (int ps = 6; ps <= 32; ps += 3) {
paint.setTextSize(SkIntToScalar(ps));
canvas->drawText(text, textLen, rotX, rotY, paint);
this->setBGColor(0xFFFFFFFF);
}
- virtual ~FontScalerGM() {
- }
-
protected:
SkString onShortName() override {
return SkISize::Make(1450, 750);
}
- static void rotate_about(SkCanvas* canvas,
- SkScalar degrees,
- SkScalar px, SkScalar py) {
- canvas->translate(px, py);
- canvas->rotate(degrees);
- canvas->translate(-px, -py);
- }
-
void onDraw(SkCanvas* canvas) override {
SkPaint paint;
SkAutoCanvasRestore acr(canvas, true);
canvas->translate(SkIntToScalar(50 + i * 230),
SkIntToScalar(20));
- rotate_about(canvas, SkIntToScalar(i * 5), x, y * 10);
+ canvas->rotate(SkIntToScalar(i * 5), x, y * 10);
{
SkPaint p;
this->setBGColor(0xFFFFFFFF);
}
- virtual ~FontScalerDistortableGM() { }
-
protected:
SkString onShortName() override {
return SkISize::Make(550, 700);
}
- static void rotate_about(SkCanvas* canvas, SkScalar degrees, SkScalar px, SkScalar py) {
- canvas->translate(px, py);
- canvas->rotate(degrees);
- canvas->translate(-px, -py);
- }
-
void onDraw(SkCanvas* canvas) override {
SkPaint paint;
paint.setAntiAlias(true);
SkAutoCanvasRestore acr(canvas, true);
canvas->translate(SkIntToScalar(30 + i * 100), SkIntToScalar(20));
- rotate_about(canvas, SkIntToScalar(i * 5), x, y * 10);
+ canvas->rotate(SkIntToScalar(i * 5), x, y * 10);
{
SkPaint p;
canvas->translate(150, 0);
canvas->save();
- canvas->translate(100, 100);
- canvas->rotate(30);
- canvas->translate(-100, -100);
+ canvas->rotate(30, 100, 100);
canvas->drawRect(r, paint);
canvas->restore();
paint.setAntiAlias(true);
canvas->translate(150, 0);
canvas->save();
- canvas->translate(100, 100);
- canvas->rotate(30);
- canvas->translate(-100, -100);
+ canvas->rotate(30, 100, 100);
canvas->drawRect(r, paint);
canvas->restore();
return SkISize::Make(W, H*2);
}
- static void rotate(SkScalar angle, SkScalar px, SkScalar py, SkCanvas* canvas) {
- SkMatrix matrix;
- matrix.setRotate(angle, px, py);
- canvas->concat(matrix);
- }
-
void onDraw(SkCanvas* canvas) override {
canvas->drawColor(SK_ColorWHITE);
for (int i = 0; i < N/2; i++) {
SkRect r;
rnd_rect(&r, &paint, rand);
- rotate(SkIntToScalar(15), SW/2, SH/2, canvas);
+ canvas->rotate(SkIntToScalar(15), SW/2, SH/2);
canvas->drawPath(fPath, paint);
}
}
typedef skiagm::GM INHERITED;
};
-static void rotate_about(SkCanvas* canvas,
- SkScalar degrees,
- SkScalar px, SkScalar py) {
- canvas->translate(px, py);
- canvas->rotate(degrees);
- canvas->translate(-px, -py);
-}
-
class TypefaceRenderingGM : public skiagm::GM {
sk_sp<SkTypeface> fFace;
-public:
- TypefaceRenderingGM() { }
-
protected:
void onOnceBeforeDraw() override {
fFace = MakeResourceAsTypeface("/fonts/hintgasp.ttf");
for (const bool& rotateABit : rotateABitTypes) {
SkAutoCanvasRestore acr(canvas, true);
if (rotateABit) {
- rotate_about(canvas, 2, x + subpixel.offset.x(),
- y + subpixel.offset.y());
+ canvas->rotate(2, x + subpixel.offset.x(),
+ y + subpixel.offset.y());
}
canvas->drawText("A", 1, x + subpixel.offset.x(),
y + subpixel.offset.y(), paint);
*/
void scale(SkScalar sx, SkScalar sy);
- /** Preconcat the current matrix with the specified rotation.
+ /** Preconcat the current matrix with the specified rotation about the origin.
@param degrees The amount to rotate, in degrees
*/
void rotate(SkScalar degrees);
+ /** Preconcat the current matrix with the specified rotation about a given point.
+ @param degrees The amount to rotate, in degrees
+ @param px The x coordinate of the point to rotate about.
+ @param py The y coordinate of the point to rotate about.
+ */
+ void rotate(SkScalar degrees, SkScalar px, SkScalar py);
+
/** Preconcat the current matrix with the specified skew.
@param sx The amount to skew in X
@param sy The amount to skew in Y
if (fRotate) {
SkScalar cx = this->width() / 2;
SkScalar cy = this->height() / 2;
- canvas->translate(cx, cy);
- canvas->rotate(gAnimTimer.scaled(10));
- canvas->translate(-cx, -cy);
+ canvas->rotate(gAnimTimer.scaled(10), cx, cy);
}
if (fPerspAnim) {
path->close();
}
- static void rotate(SkCanvas* canvas, SkScalar angle, SkScalar px, SkScalar py) {
- canvas->translate(-px, -py);
- canvas->rotate(angle);
- canvas->translate(px, py);
- }
-
virtual void onDrawContent(SkCanvas* canvas) {
SkPaint paint;
paint.setAntiAlias(true);
paint.setStyle(SkPaint::kStroke_Style);
-// canvas->drawCircle(250, 250, 220, paint);
SkMatrix matrix;
matrix.setScale(SkIntToScalar(100), SkIntToScalar(100));
matrix.postTranslate(SkIntToScalar(200), SkIntToScalar(200));
colors, nullptr, SK_ARRAY_COUNT(colors)));
SkAutoCanvasRestore acr(c, true);
-
- c->translate(r.centerX(), r.centerY());
- c->rotate(angle);
- c->translate(-r.centerX(), -r.centerY());
+ c->rotate(angle, r.centerX(), r.centerY());
SkRect bounds = r;
r.inset(p.getStrokeWidth(), p.getStrokeWidth());
fFaces[i] = SkTypeface::MakeFromName(
gFaces[i].fName, SkFontStyle::FromOldStyle(gFaces[i].fStyle));
}
-// this->setBGColor(0xFFDDDDDD);
}
protected:
return this->INHERITED::onQuery(evt);
}
- static void rotate_about(SkCanvas* canvas, SkScalar degrees, SkScalar px, SkScalar py) {
- canvas->translate(px, py);
- canvas->rotate(degrees);
- canvas->translate(-px, -py);
- }
-
virtual void onDrawContent(SkCanvas* canvas) {
SkPaint paint;
SkAutoCanvasRestore acr(canvas, true);
canvas->translate(SkIntToScalar(50 + i * 230),
SkIntToScalar(20));
- rotate_about(canvas, SkIntToScalar(i * 5), x, y * 10);
+ canvas->rotate(SkIntToScalar(i * 5), x, y * 10);
{
SkPaint p;
fColor = floats_to_color(values);
canvas->save();
- canvas->translate(fR.centerX(), fR.centerY());
- canvas->rotate(values[4]);
- canvas->translate(-fR.centerX(), -fR.centerY());
+ canvas->rotate(values[4], fR.centerX(), fR.centerY());
switch (res) {
case SkInterpolator::kFreezeEnd_Result:
this->concat(m);
}
+void SkCanvas::rotate(SkScalar degrees, SkScalar px, SkScalar py) {
+ SkMatrix m;
+ m.setRotate(degrees, px, py);
+ this->concat(m);
+}
+
void SkCanvas::skew(SkScalar sx, SkScalar sy) {
SkMatrix m;
m.setSkew(sx, sy);