15b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy/*
25b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * Copyright (C) 2010 The Android Open Source Project
35b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy *
45b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * Licensed under the Apache License, Version 2.0 (the "License");
55b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * you may not use this file except in compliance with the License.
65b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * You may obtain a copy of the License at
75b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy *
85b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy *      http://www.apache.org/licenses/LICENSE-2.0
95b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy *
105b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * Unless required by applicable law or agreed to in writing, software
115b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * distributed under the License is distributed on an "AS IS" BASIS,
125b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * See the License for the specific language governing permissions and
145b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * limitations under the License.
155b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy */
165b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
175b4628aeeaa0462cd99256d28b636c06b1845930Romain Guypackage com.android.test.hwui;
185b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
195b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.app.Activity;
205b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.content.Context;
215b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.graphics.Canvas;
225b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.graphics.Paint;
235b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.graphics.Path;
245b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.graphics.RectF;
255b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.os.Bundle;
265b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.view.View;
275b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
285b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy@SuppressWarnings({"UnusedDeclaration"})
295b4628aeeaa0462cd99256d28b636c06b1845930Romain Guypublic class ScaledPathsActivity extends Activity {
305b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy    @Override
315b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy    protected void onCreate(Bundle savedInstanceState) {
325b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        super.onCreate(savedInstanceState);
335b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        final PathsView view = new PathsView(this);
345b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        setContentView(view);
355b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy    }
365b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
375b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy    public static class PathsView extends View {
385b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        private final Paint mPathPaint;
395b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        private final Path mPath;
405b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        private final RectF mPathBounds = new RectF();
415b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
425b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        public PathsView(Context c) {
435b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            super(c);
445b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
455b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPathPaint = new Paint();
465b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPathPaint.setAntiAlias(true);
475b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPathPaint.setColor(0xff0000ff);
485b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPathPaint.setStrokeWidth(5.0f);
495b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPathPaint.setStyle(Paint.Style.FILL);
505b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
515b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPath = new Path();
525b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPath.moveTo(0.0f, 0.0f);
535b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPath.cubicTo(0.0f, 0.0f, 100.0f, 150.0f, 100.0f, 200.0f);
545b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPath.cubicTo(100.0f, 200.0f, 50.0f, 300.0f, -80.0f, 200.0f);
555b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPath.cubicTo(-80.0f, 200.0f, 100.0f, 200.0f, 200.0f, 0.0f);
565b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
575b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPath.computeBounds(mPathBounds, true);
585b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        }
595b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
605b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        @Override
615b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        protected void onDraw(Canvas canvas) {
625b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            super.onDraw(canvas);
635b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            canvas.drawARGB(255, 255, 255, 255);
645b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
655b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPathPaint.setColor(0xff0000ff);
665b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPathPaint.setStyle(Paint.Style.FILL);
675b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
685b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            canvas.save();
695b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            drawPath(canvas, 1.0f, 1.0f);
705b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            drawPath(canvas, 2.0f, 2.0f);
715b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            drawPath(canvas, 4.0f, 4.0f);
725b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            canvas.restore();
735b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
745b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPathPaint.setColor(0xffff0000);
755b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            mPathPaint.setStyle(Paint.Style.STROKE);
765b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
775b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            canvas.save();
785b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            drawPath(canvas, 1.0f, 1.0f);
795b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            drawPath(canvas, 2.0f, 2.0f);
805b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            drawPath(canvas, 4.0f, 4.0f);
815b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            canvas.restore();
825b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        }
835b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy
845b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        private void drawPath(Canvas canvas, float scaleX, float scaleY) {
855b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            canvas.save();
865b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            canvas.scale(scaleX, scaleY);
875b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            canvas.drawPath(mPath, mPathPaint);
885b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            canvas.restore();
895b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy            canvas.translate(mPathBounds.width() * scaleX, 0.0f);
905b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy        }
915b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy    }
925b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy}
93