/*
 * Copyright 2017 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 "SkTextUtils.h"

// http://bug.skia.org/7315
DEF_SIMPLE_GM(text_scale_skew, canvas, 256, 128) {
    SkPaint p;
    p.setAntiAlias(true);
    SkFont font;
    font.setSize(18.0f);
    float y = 10.0f;
    for (float scale : { 0.5f, 0.71f, 1.0f, 1.41f, 2.0f }) {
        font.setScaleX(scale);
        y += font.getSpacing();
        float x = 50.0f;
        for (float skew : { -0.5f, 0.0f, 0.5f }) {
            font.setSkewX(skew);
            SkTextUtils::DrawString(canvas, "Skia", x, y, font, p, SkTextUtils::kCenter_Align);
            x += 78.0f;
        }
    }
}
