1026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy/* 2026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * Copyright (C) 2010 The Android Open Source Project 3026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * 4026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * you may not use this file except in compliance with the License. 6026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * You may obtain a copy of the License at 7026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * 8026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * 10026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * Unless required by applicable law or agreed to in writing, software 11026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * See the License for the specific language governing permissions and 14026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy * limitations under the License. 15026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy */ 16026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 17f607bdc167f66b3e7003acaa4736ae46d78c1492Romain Guypackage com.android.test.hwui; 18026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 19026c5e16704e817cac7d9c382914c947e34f87e0Romain Guyimport android.app.Activity; 20026c5e16704e817cac7d9c382914c947e34f87e0Romain Guyimport android.content.Context; 21026c5e16704e817cac7d9c382914c947e34f87e0Romain Guyimport android.graphics.Canvas; 22026c5e16704e817cac7d9c382914c947e34f87e0Romain Guyimport android.graphics.Paint; 23026c5e16704e817cac7d9c382914c947e34f87e0Romain Guyimport android.graphics.PorterDuff; 24026c5e16704e817cac7d9c382914c947e34f87e0Romain Guyimport android.graphics.PorterDuffXfermode; 25026c5e16704e817cac7d9c382914c947e34f87e0Romain Guyimport android.os.Bundle; 26026c5e16704e817cac7d9c382914c947e34f87e0Romain Guyimport android.view.View; 27026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 28026c5e16704e817cac7d9c382914c947e34f87e0Romain Guyimport static android.graphics.PorterDuff.Mode; 29026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 30026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy@SuppressWarnings({"UnusedDeclaration"}) 31026c5e16704e817cac7d9c382914c947e34f87e0Romain Guypublic class XfermodeActivity extends Activity { 32026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy @Override 33026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy protected void onCreate(Bundle savedInstanceState) { 34026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy super.onCreate(savedInstanceState); 35026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 36026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy setContentView(new XfermodesView(this)); 37026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy } 38026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 39026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy static class XfermodesView extends View { 40026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy private final Paint mBluePaint; 41026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy private final Paint mRedPaint; 42026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 43026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy XfermodesView(Context c) { 44026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy super(c); 45026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 46026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy mBluePaint = new Paint(); 47026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy mBluePaint.setColor(0xff0000ff); 48026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 49026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy mRedPaint = new Paint(); 50026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy mRedPaint.setColor(0x7fff0000); 51026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy } 52026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 53026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy @Override 54026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy protected void onDraw(Canvas canvas) { 55026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy super.onDraw(canvas); 56026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy //canvas.drawRGB(255, 255, 255); 57026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 58026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(100.0f, 100.0f); 59026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 60026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy // SRC modes 61026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.save(); 62026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 63026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy drawRects(canvas, Mode.SRC_OVER); 64026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(0.0f, 100.0f); 65026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 66026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy drawRects(canvas, Mode.SRC_IN); 67026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(0.0f, 100.0f); 68026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 69026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy drawRects(canvas, Mode.SRC_OUT); 70026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(0.0f, 100.0f); 71026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 72026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy drawRects(canvas, Mode.SRC_ATOP); 73026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(0.0f, 100.0f); 74026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 75026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy drawRects(canvas, Mode.SRC); 76026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 77026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.restore(); 78026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 79026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(100.0f, 0.0f); 80026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 81026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy // DST modes 82026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.save(); 83026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 84026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy drawRects(canvas, Mode.DST_OVER); 85026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(0.0f, 100.0f); 86026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 87026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy drawRects(canvas, Mode.DST_IN); 88026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(0.0f, 100.0f); 89026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 90026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy drawRects(canvas, Mode.DST_OUT); 91026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(0.0f, 100.0f); 92026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 93026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy drawRects(canvas, Mode.DST_ATOP); 94026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(0.0f, 100.0f); 95026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 96026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy drawRects(canvas, Mode.DST); 97026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 98026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.restore(); 99026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 100026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(100.0f, 0.0f); 101026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 102026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy // Other modes 103026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.save(); 104026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 105026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy drawRects(canvas, Mode.CLEAR); 106026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(0.0f, 100.0f); 107026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 108026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy drawRects(canvas, Mode.XOR); 109026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 110026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(0.0f, 100.0f); 111026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 112026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy mBluePaint.setAlpha(127); 113026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.drawRect(0.0f, 0.0f, 50.0f, 50.0f, mBluePaint); 114026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 115026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(0.0f, 100.0f); 116026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 117026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy mBluePaint.setAlpha(10); 118026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy mBluePaint.setColor(0x7f0000ff); 119026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.drawRect(0.0f, 0.0f, 50.0f, 50.0f, mBluePaint); 120026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 121026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy mBluePaint.setColor(0xff0000ff); 122026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy mBluePaint.setAlpha(255); 123026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 124026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.restore(); 125026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy } 126026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 127026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy private void drawRects(Canvas canvas, PorterDuff.Mode mode) { 128026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.drawRect(0.0f, 0.0f, 50.0f, 50.0f, mBluePaint); 129026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy 130026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.save(); 131026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.translate(25.0f, 25.0f); 132026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy mRedPaint.setXfermode(new PorterDuffXfermode(mode)); 133026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.drawRect(0.0f, 0.0f, 50.0f, 50.0f, mRedPaint); 134026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy canvas.restore(); 135026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy } 136026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy } 137026c5e16704e817cac7d9c382914c947e34f87e0Romain Guy} 138