158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger/*
258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Copyright 2013 Google Inc.
358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger *
458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * found in the LICENSE file.
658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */
758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "gm.h"
958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
1058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergernamespace skiagm {
1158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
1258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger// Draw rects with various stroke widths at 1/8 pixel increments
1358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass ThinStrokedRectsGM : public GM {
1458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerpublic:
1558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    ThinStrokedRectsGM() {
1658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        this->setBGColor(0xFF000000);
1758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    }
1858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
1958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprotected:
2058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual SkString onShortName() SK_OVERRIDE {
2158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        return SkString("thinstrokedrects");
2258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    }
2358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
2458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual SkISize onISize() SK_OVERRIDE {
2558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        return make_isize(240, 320);
2658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    }
2758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
2858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
2958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
3058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        SkPaint paint;
3158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        paint.setColor(SK_ColorWHITE);
3258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        paint.setStyle(SkPaint::kStroke_Style);
3358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        paint.setAntiAlias(true);
3458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
3558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        static const SkRect rect = { 0, 0, 10, 10 };
3658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        static const SkRect rect2 = { 0, 0, 20, 20 };
3758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
3858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        static const SkScalar gStrokeWidths[] = {
3958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            4, 2, 1, 0.5f, 0.25f, 0.125f, 0
4058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        };
4158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
4258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        canvas->translate(5, 5);
4358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        for (int i = 0; i < 8; ++i) {
4458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            canvas->save();
4558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            canvas->translate(i*0.125f, i*30.0f);
4658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            for (size_t j = 0; j < SK_ARRAY_COUNT(gStrokeWidths); ++j) {
4758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                paint.setStrokeWidth(gStrokeWidths[j]);
4858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                canvas->drawRect(rect, paint);
4958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                canvas->translate(15, 0);
5058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            }
5158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            canvas->restore();
5258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        }
5358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
5458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        // Draw a second time in red with a scale
5558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        paint.setColor(SK_ColorRED);
5658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        canvas->translate(0, 15);
5758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        for (int i = 0; i < 8; ++i) {
5858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            canvas->save();
5958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            canvas->translate(i*0.125f, i*30.0f);
6058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            canvas->scale(0.5f, 0.5f);
6158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            for (size_t j = 0; j < SK_ARRAY_COUNT(gStrokeWidths); ++j) {
6258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                paint.setStrokeWidth(2.0f * gStrokeWidths[j]);
6358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                canvas->drawRect(rect2, paint);
6458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger                canvas->translate(30, 0);
6558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            }
6658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            canvas->restore();
6758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        }
6858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    }
6958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
7058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprivate:
7158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    typedef GM INHERITED;
7258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger};
7358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
7458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger//////////////////////////////////////////////////////////////////////////////
7558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
7658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_GM( return SkNEW(ThinStrokedRectsGM); )
7758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
7858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger}
79