18018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy/* 28018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * Copyright (C) 2010 The Android Open Source Project 38018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * 48018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 58018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * you may not use this file except in compliance with the License. 68018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * You may obtain a copy of the License at 78018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * 88018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 98018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * 108018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * Unless required by applicable law or agreed to in writing, software 118018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 128018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * See the License for the specific language governing permissions and 148018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy * limitations under the License. 158018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy */ 168018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 178018c8db8221aa604b3c083e09d173cc27e53d83Romain Guypackage com.android.test.hwui; 188018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 198018c8db8221aa604b3c083e09d173cc27e53d83Romain Guyimport android.app.Activity; 208018c8db8221aa604b3c083e09d173cc27e53d83Romain Guyimport android.content.Context; 218018c8db8221aa604b3c083e09d173cc27e53d83Romain Guyimport android.graphics.Canvas; 228018c8db8221aa604b3c083e09d173cc27e53d83Romain Guyimport android.graphics.Color; 238018c8db8221aa604b3c083e09d173cc27e53d83Romain Guyimport android.graphics.Paint; 248018c8db8221aa604b3c083e09d173cc27e53d83Romain Guyimport android.graphics.Path; 258018c8db8221aa604b3c083e09d173cc27e53d83Romain Guyimport android.os.Bundle; 268018c8db8221aa604b3c083e09d173cc27e53d83Romain Guyimport android.util.Log; 278018c8db8221aa604b3c083e09d173cc27e53d83Romain Guyimport android.view.View; 288018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 298018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy@SuppressWarnings({"UnusedDeclaration"}) 308018c8db8221aa604b3c083e09d173cc27e53d83Romain Guypublic class PathOpsActivity extends Activity { 318018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy @Override 328018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy protected void onCreate(Bundle savedInstanceState) { 338018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy super.onCreate(savedInstanceState); 348018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy final PathsView view = new PathsView(this); 358018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy setContentView(view); 368018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy } 378018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 388018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy public static class PathsView extends View { 398018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy private final Paint mPaint; 408018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy private Path[] mPaths; 418018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy private float mSize; 428018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 438018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 448018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy public PathsView(Context c) { 458018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy super(c); 468018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 478018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy mPaint = new Paint(); 488018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy mPaint.setAntiAlias(true); 498018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy mPaint.setStyle(Paint.Style.FILL); 508018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy mPaint.setColor(Color.RED); 518018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy } 528018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 538018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy @Override 548018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy protected void onSizeChanged(int w, int h, int oldw, int oldh) { 558018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy super.onSizeChanged(w, h, oldw, oldh); 568018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 578018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy Path.Op[] ops = Path.Op.values(); 588018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy mPaths = new Path[ops.length]; 598018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 608018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy mSize = w / (ops.length * 2.0f); 618018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 628018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy Path p1 = new Path(); 638018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy p1.addRect(0.0f, 0.0f, mSize, mSize, Path.Direction.CW); 648018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 658018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy Path p2 = new Path(); 668018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy p2.addCircle(mSize, mSize, mSize / 2.0f, Path.Direction.CW); 678018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 688018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy for (int i = 0; i < ops.length; i++) { 698018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy mPaths[i] = new Path(); 708018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy if (!mPaths[i].op(p1, p2, ops[i])) { 718018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy Log.d("PathOps", ops[i].name() + " failed!"); 728018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy } 738018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy } 748018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy } 758018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 768018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy @Override 778018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy protected void onDraw(Canvas canvas) { 788018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy super.onDraw(canvas); 798018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy 808018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy canvas.translate(mSize * 0.2f, getHeight() / 2.0f); 818018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy for (Path path : mPaths) { 828018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy canvas.drawPath(path, mPaint); 838018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy canvas.translate(mSize * 1.8f, 0.0f); 848018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy } 858018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy } 868018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy } 878018c8db8221aa604b3c083e09d173cc27e53d83Romain Guy} 88