From a8fe3f6431349d851352efb6ab4eefb34125414e Mon Sep 17 00:00:00 2001 From: Mike Reed Date: Thu, 29 Oct 2009 15:31:08 -0400 Subject: [PATCH] add graphicslab test app --- apps/GraphicsLab/Android.mk | 10 + apps/GraphicsLab/AndroidManifest.xml | 11 + apps/GraphicsLab/MODULE_LICENSE_APACHE2 | 0 apps/GraphicsLab/NOTICE | 190 ++++++++++++++++++ apps/GraphicsLab/res/drawable/beach.jpg | Bin 0 -> 47700 bytes apps/GraphicsLab/res/layout/graphics_lab.xml | 25 +++ .../com/android/graphicslab/GraphicsLab.java | 139 +++++++++++++ 7 files changed, 375 insertions(+) create mode 100644 apps/GraphicsLab/Android.mk create mode 100644 apps/GraphicsLab/AndroidManifest.xml create mode 100644 apps/GraphicsLab/MODULE_LICENSE_APACHE2 create mode 100644 apps/GraphicsLab/NOTICE create mode 100644 apps/GraphicsLab/res/drawable/beach.jpg create mode 100644 apps/GraphicsLab/res/layout/graphics_lab.xml create mode 100644 apps/GraphicsLab/src/com/android/graphicslab/GraphicsLab.java diff --git a/apps/GraphicsLab/Android.mk b/apps/GraphicsLab/Android.mk new file mode 100644 index 000000000..e8dd114d7 --- /dev/null +++ b/apps/GraphicsLab/Android.mk @@ -0,0 +1,10 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := tests + +LOCAL_SRC_FILES := $(call all-subdir-java-files) + +LOCAL_PACKAGE_NAME := GraphicsLab + +include $(BUILD_PACKAGE) diff --git a/apps/GraphicsLab/AndroidManifest.xml b/apps/GraphicsLab/AndroidManifest.xml new file mode 100644 index 000000000..a91c4fad3 --- /dev/null +++ b/apps/GraphicsLab/AndroidManifest.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/apps/GraphicsLab/MODULE_LICENSE_APACHE2 b/apps/GraphicsLab/MODULE_LICENSE_APACHE2 new file mode 100644 index 000000000..e69de29bb diff --git a/apps/GraphicsLab/NOTICE b/apps/GraphicsLab/NOTICE new file mode 100644 index 000000000..c5b1efa7a --- /dev/null +++ b/apps/GraphicsLab/NOTICE @@ -0,0 +1,190 @@ + + Copyright (c) 2005-2008, 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. + + 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. + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + diff --git a/apps/GraphicsLab/res/drawable/beach.jpg b/apps/GraphicsLab/res/drawable/beach.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae9794fc0bc56b3483a900b93247127497cd971e GIT binary patch literal 47700 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%0D51sURd$ITpil+7LLZx|fgTrxZs@grB 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 literal 0 HcmV?d00001 diff --git a/apps/GraphicsLab/res/layout/graphics_lab.xml b/apps/GraphicsLab/res/layout/graphics_lab.xml new file mode 100644 index 000000000..50778313a --- /dev/null +++ b/apps/GraphicsLab/res/layout/graphics_lab.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/apps/GraphicsLab/src/com/android/graphicslab/GraphicsLab.java b/apps/GraphicsLab/src/com/android/graphicslab/GraphicsLab.java new file mode 100644 index 000000000..f1f2f42af --- /dev/null +++ b/apps/GraphicsLab/src/com/android/graphicslab/GraphicsLab.java @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2007 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.android.graphicslab; + +import java.util.Map; + +import android.app.Activity; +import android.content.Context; +import android.graphics.*; +import android.graphics.utils.*; +import android.os.Bundle; +import android.view.*; + +public class GraphicsLab extends Activity { + public GraphicsLab() {} + + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + setContentView(new SampleView(this)); +// setTitle("Graphics Lab"); + } + + private static class SampleView extends View { + private static final int ROWS = 16; + private static final int COLS = 16; + + private BoundaryPatch mPatch; + private float[] mCubics; + private Paint mPaint0; + private Paint mPaint1; + private int mCurrIndex = -1; + private float mPrevX; + private float mPrevY; + + public SampleView(Context context) { + super(context); + setFocusable(true); + + Bitmap bm = BitmapFactory.decodeResource(getResources(), + R.drawable.beach); + + mPatch = new BoundaryPatch(); + mPatch.setTexture(bm); + + float unit = 90; + mCubics = new float[] { + 0, 0, 1, 0, 2, 0, + 3, 0, 3, 1, 3, 2, + 3, 3, 2, 3, 1, 3, + 0, 3, 0, 2, 0, 1 + }; + for (int i = 0; i < 24; i++) { + mCubics[i] *= 90; + mCubics[i] += 20; + } + rebuildPatch(); + + mPaint0 = new Paint(); + mPaint0.setAntiAlias(true); + mPaint0.setStrokeWidth(12); + mPaint0.setStrokeCap(Paint.Cap.ROUND); + mPaint1 = new Paint(mPaint0); + mPaint1.setColor(0xFFFFFFFF); + mPaint1.setStrokeWidth(10); + } + + @Override protected void onDraw(Canvas canvas) { + canvas.drawColor(0xFFCCCCCC); + mPatch.draw(canvas); + canvas.drawPoints(mCubics, mPaint0); + canvas.drawPoints(mCubics, mPaint1); + } + + private void rebuildPatch() { + mPatch.setCubicBoundary(mCubics, 0, ROWS, COLS); + } + + private int findPtIndex(float x, float y) { + final float tolerance = 25; + final float[] pts = mCubics; + for (int i = 0; i < (pts.length >> 1); i++) { + if (Math.abs(pts[i*2 + 0] - x) <= tolerance && + Math.abs(pts[i*2 + 1] - y) <= tolerance) { + return i*2; + } + } + return -1; + } + + private void offsetPts(float dx, float dy) { + final float[] pts = mCubics; + for (int i = 0; i < (pts.length >> 1); i++) { + pts[i*2 + 0] += dx; + pts[i*2 + 1] += dy; + } + rebuildPatch(); + } + + @Override public boolean onTouchEvent(MotionEvent event) { + float x = event.getX(); + float y = event.getY(); + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + mCurrIndex = findPtIndex(x, y); + mPrevX = x; + mPrevY = y; + break; + case MotionEvent.ACTION_MOVE: + if (mCurrIndex >= 0) { + mCubics[mCurrIndex + 0] = x; + mCubics[mCurrIndex + 1] = y; + mPatch.setCubicBoundary(mCubics, 0, ROWS, COLS); + } else { + offsetPts(x - mPrevX, y - mPrevY); + mPrevX = x; + mPrevY = y; + } + invalidate(); + break; + } + return true; + } + } +} +