11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
80b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SampleCode.h"
90b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkView.h"
100b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkCanvas.h"
110b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkDevice.h"
120b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger#include "SkPaint.h"
130b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
140b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerclass StrokeRectSample : public SampleView {
150b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerpublic:
160b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    StrokeRectSample() {}
170b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
180b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerprotected:
190b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    // overrides from SkEventSink
200b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual bool onQuery(SkEvent* evt) {
210b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        if (SampleCode::TitleQ(*evt)) {
220b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            SampleCode::TitleR(evt, "Stroke Rects");
230b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            return true;
240b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        }
250b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        return this->INHERITED::onQuery(evt);
260b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    }
270b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
280b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    virtual void onDrawContent(SkCanvas* canvas) {
290b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        SkPaint paint;
300b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        paint.setAntiAlias(true);
310b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        paint.setStyle(SkPaint::kStroke_Style);
320b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        paint.setStrokeWidth(SkIntToScalar(20));
330b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
340b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        SkPaint hair;
350b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        hair.setStyle(SkPaint::kStroke_Style);
360b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        hair.setColor(SK_ColorRED);
370b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
380b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        static const SkISize gSize[] = {
390b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            {   100,   50 },
400b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            {   100,    0 },
410b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            {     0,   50 },
420b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            {     0,    0 }
430b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        };
440b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
450b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        static const SkPaint::Join gJoin[] = {
460b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            SkPaint::kMiter_Join,
470b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            SkPaint::kRound_Join,
480b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            SkPaint::kBevel_Join
490b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        };
500b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
510b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        canvas->translate(paint.getStrokeWidth(), paint.getStrokeWidth());
520b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        for (size_t i = 0; i < SK_ARRAY_COUNT(gJoin); ++i) {
530b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            paint.setStrokeJoin(gJoin[i]);
540b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
550b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            canvas->save();
560b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            for (size_t j = 0; j < SK_ARRAY_COUNT(gSize); ++j) {
570b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger                SkRect r = SkRect::MakeWH(SkIntToScalar(gSize[j].fWidth),
580b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger                                          SkIntToScalar(gSize[j].fHeight));
590b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger                canvas->drawRect(r, paint);
600b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger                canvas->drawRect(r, hair);
610b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger                canvas->translate(0, SkIntToScalar(100));
620b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            }
630b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            canvas->restore();
640b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger            canvas->translate(SkIntToScalar(150), 0);
650b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger        }
660b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    }
670b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
680b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerprivate:
690b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger    typedef SampleView INHERITED;
700b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger};
710b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
720b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger///////////////////////////////////////////////////////////////////////////////
730b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
740b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerstatic SkView* MyFactory() { return new StrokeRectSample; }
750b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergerstatic SkViewRegister reg(MyFactory);
760b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger
77