summaryrefslogtreecommitdiffstats
path: root/tests/HwAccelerationTest
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2010-09-09 14:42:43 -0700
committerRomain Guy <romainguy@google.com>2010-09-09 14:42:43 -0700
commita5aed0d58962a24c44728ffc46dc9e1ba2f9fda5 (patch)
tree4194d14711b2cba0e8192e5f1c0764f530bc7309 /tests/HwAccelerationTest
parentd90f23e24a4d1768d5a7ed0e7072e67af6330a45 (diff)
downloadframeworks_base-a5aed0d58962a24c44728ffc46dc9e1ba2f9fda5.zip
frameworks_base-a5aed0d58962a24c44728ffc46dc9e1ba2f9fda5.tar.gz
frameworks_base-a5aed0d58962a24c44728ffc46dc9e1ba2f9fda5.tar.bz2
Add support for advanced blend modes with the framebuffer.
This adds the ability to blend with the framebuffer using Darken, Lighten, Add, Multiply, Overlay and Screen. Change-Id: Iae01a53797d4ad39c373cba6ff2a42293129da1a
Diffstat (limited to 'tests/HwAccelerationTest')
-rw-r--r--tests/HwAccelerationTest/AndroidManifest.xml10
-rw-r--r--tests/HwAccelerationTest/src/com/google/android/test/hwui/FramebufferBlendActivity.java111
2 files changed, 121 insertions, 0 deletions
diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml
index db1e5ef..ec1cbf1 100644
--- a/tests/HwAccelerationTest/AndroidManifest.xml
+++ b/tests/HwAccelerationTest/AndroidManifest.xml
@@ -230,6 +230,16 @@
</activity>
<activity
+ android:name="FramebufferBlendActivity"
+ android:label="_FramebufferBlend">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+
+
+ <activity
android:name="StackActivity"
android:label="_Stacks">
<intent-filter>
diff --git a/tests/HwAccelerationTest/src/com/google/android/test/hwui/FramebufferBlendActivity.java b/tests/HwAccelerationTest/src/com/google/android/test/hwui/FramebufferBlendActivity.java
new file mode 100644
index 0000000..ef84b67
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/google/android/test/hwui/FramebufferBlendActivity.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package com.google.android.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.LinearGradient;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Shader;
+import android.os.Bundle;
+import android.view.View;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class FramebufferBlendActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(new BlendView(this));
+ }
+
+ static class BlendView extends View {
+ private int mTexWidth;
+ private int mTexHeight;
+ private Paint mPaint;
+ private LinearGradient mHorGradient;
+ private Bitmap mTexture;
+
+ BlendView(Context c) {
+ super(c);
+
+ mTexture = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
+ mTexWidth = mTexture.getWidth();
+ mTexHeight = mTexture.getHeight();
+
+ mHorGradient = new LinearGradient(0.0f, 0.0f, mTexWidth, 0.0f,
+ Color.BLACK, Color.WHITE, Shader.TileMode.CLAMP);
+
+ mPaint = new Paint();
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ canvas.drawRGB(255, 255, 255);
+
+ canvas.save();
+ canvas.translate(40.0f, 40.0f);
+
+ drawBlendedBitmap(canvas, PorterDuff.Mode.DARKEN);
+ drawBlendedBitmap(canvas, PorterDuff.Mode.LIGHTEN);
+ drawBlendedBitmap(canvas, PorterDuff.Mode.MULTIPLY);
+
+ canvas.restore();
+
+ canvas.save();
+ canvas.translate(40.0f + mTexWidth + 40.0f, 40.0f);
+
+ drawBlendedBitmap(canvas, PorterDuff.Mode.SCREEN);
+ drawBlendedBitmap(canvas, PorterDuff.Mode.ADD);
+ drawBlendedBitmapInverse(canvas, PorterDuff.Mode.OVERLAY);
+
+ canvas.restore();
+ }
+
+ private void drawBlendedBitmap(Canvas canvas, PorterDuff.Mode mode) {
+ mPaint.setShader(null);
+ mPaint.setXfermode(null);
+ canvas.drawBitmap(mTexture, 0.0f, 0.0f, mPaint);
+
+ mPaint.setShader(mHorGradient);
+ mPaint.setXfermode(new PorterDuffXfermode(mode));
+ canvas.drawRect(0.0f, 0.0f, mTexWidth, mTexHeight, mPaint);
+
+ canvas.translate(0.0f, 40.0f + mTexHeight);
+ }
+
+ private void drawBlendedBitmapInverse(Canvas canvas, PorterDuff.Mode mode) {
+ mPaint.setXfermode(null);
+ mPaint.setShader(mHorGradient);
+ canvas.drawRect(0.0f, 0.0f, mTexWidth, mTexHeight, mPaint);
+
+ mPaint.setXfermode(new PorterDuffXfermode(mode));
+ mPaint.setShader(null);
+ canvas.drawBitmap(mTexture, 0.0f, 0.0f, mPaint);
+
+ canvas.translate(0.0f, 40.0f + mTexHeight);
+ }
+ }
+}