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