Delete browserplugin sample. do not merge
It doesn't build in all environments.
Change-Id: I96fbb28e1bea44656ff6cfb9002eedfd5471612e
diff --git a/samples/BrowserPlugin/Android.mk b/samples/BrowserPlugin/Android.mk
deleted file mode 100644
index 827700f..0000000
--- a/samples/BrowserPlugin/Android.mk
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (C) 2009 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.
-#
-
-TOP_LOCAL_PATH:= $(call my-dir)
-
-# Build application
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := tests
-
-LOCAL_SRC_FILES := $(call all-subdir-java-files)
-
-LOCAL_PROGUARD_ENABLED := disabled
-
-LOCAL_PACKAGE_NAME := SampleBrowserPlugin
-
-LOCAL_JNI_SHARED_LIBRARIES := libsampleplugin
-
-include $(BUILD_PACKAGE)
-
-# ============================================================
-
-# Also build all of the sub-targets under this one: the shared library.
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/samples/BrowserPlugin/AndroidManifest.xml b/samples/BrowserPlugin/AndroidManifest.xml
deleted file mode 100644
index d926729..0000000
--- a/samples/BrowserPlugin/AndroidManifest.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.sampleplugin"
- android:versionCode="1"
- android:versionName="1.0">
-
- <uses-permission android:name="android.webkit.permission.PLUGIN"/>
-
- <uses-sdk android:minSdkVersion="3" />
-
- <application android:icon="@drawable/sample_browser_plugin"
- android:label="@string/sample_browser_plugin">
- <service android:name=".SamplePlugin">
- <intent-filter>
- <action android:name="android.webkit.PLUGIN" />
- </intent-filter>
- <meta-data android:name="type" android:value="native" />
- </service>
- </application>
-
-</manifest>
diff --git a/samples/BrowserPlugin/MODULE_LICENSE_APACHE2 b/samples/BrowserPlugin/MODULE_LICENSE_APACHE2
deleted file mode 100644
index e69de29..0000000
--- a/samples/BrowserPlugin/MODULE_LICENSE_APACHE2
+++ /dev/null
diff --git a/samples/BrowserPlugin/NOTICE b/samples/BrowserPlugin/NOTICE
deleted file mode 100644
index c5b1efa..0000000
--- a/samples/BrowserPlugin/NOTICE
+++ /dev/null
@@ -1,190 +0,0 @@
-
- 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/samples/BrowserPlugin/README b/samples/BrowserPlugin/README
deleted file mode 100644
index 29797b2..0000000
--- a/samples/BrowserPlugin/README
+++ /dev/null
@@ -1,177 +0,0 @@
-# Copyright (C) 2009 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.
-#
-
-##############################
-######### CONTENTS ###########
-A. INTRODUCTION
-B. PLUGIN STRUCTURE
-C. HOW TO DEPLOY
-D. SUB-PLUGINS
- 1. ANIMATION
- 2. AUDIO
- 3. BACKGROUND
- 4. FORM
- 5. PAINT
-
-
-##############################
-## (A) INTRODUCTION ##########
-
-The sample plugin is intended to give plugin developers a point of reference to
-see how an android browser plugin is created and how to use the available APIs.
-A plugin is packaged like a standard apk and can be installed either via the
-market or adb. The sample plugin attempts to exercise as many of the APIs as
-possible but unfortunately not all are covered.
-
-Trying to have a single plugin demonstrate all possible API interactions on one
-screen was not practical. On the other hand we also didn't want a separate
-plugin for each interction, as that would result in many separate apk's that
-would need to be maintained. To solve this problem we developed the idea to use
-"sub-plugins". With a sub-plugin only one specific feature of the plugin would
-be active at a time, but they would all share as much common code as possible.
-A detailed description of each sub-plugin and its function can be found in the
-sub-plugins section.
-
-##############################
-## (B) PLUGIN STRUCTURE ######
-
-The sample plugin is packaged as one plugin but contains many unique sub-plugins
-(e.g. audio and paint). The package consists of two pieces: (1) Java code
-containing the config; (2) C++ shared library containing the brower/plugin
-bindings and the sub-plugin classes.
-
-~~~~ (1) JAVA ~~~~~
-Android.mk: specifies the name of the APK (SampleBrowserPlugin) as well as which
- shared libraries to include.
-
-AndroidManifest.xml: similar to a standard android manifest file, except that it
- must contain the "uses-permission" and "service"
- elements that are plugin specific. The "service" element
- contains sub-elements that describe the java component of
- the service.
-
-src/*: location of the java source files. This contains the SamplePlugin.class
- which is the java component of our plugin. The component must exist and
- implement the required interfaces, though simply returning null is valid.
-
-res/*: location of the static resources (e.g. an icon for the plugin)
-
-~~~~ (2) C++ ~~~~~
-jni/Android.mk: specifies the build parameters for the shared library that is to
- be included with the apk. The library contains all the bindings
- between the plugin and the browser.
-
-jni/main.*: this code is the binding point between the plugin and the browser.
- It supports all of the functions required for a standard netscape
- style plugin as well as all the android specific APIs. The initial
- starting point for the plugin is the NP_Initialize function. The
- NPP_New function is responsible for reading the input args and
- selecting the appropriate sub-plugin to instantiate. Most other
- functions either return fixed values or pass their inputs to the
- sub-plugin for processing.
-
-jni/PluginObject.*: The pluginObject provides a convenient container in which to
- store variables (the plugin's state). This objects two main
- responsibilities are (1) to construct and store the NPClass
- object (done using code provided by Apple) and (2) provide
- the abstract class for the sub-plugin objects and a place to
- store the sub-plugin after it is instantiated.
-
-jni/*/*: Each of the sub-plugins has a folder that contains its class definition
- and logic. The sub-plugin receives events from the browser and it can
- also communicate with the browser using the netscape plugin functions
- as well as the specialized android interfaces.
-
-
-##############################
-## (C) HOW TO DEPLOY #########
-
-To compile and install a plugin on a device/emulator simply...
-
-1. run "make SampleBrowserPlugin" (compiles libsampleplugin.so and builds the apk)
-2. the previous command produces an apk file so record its location
-3. run "adb install [apk_file]" to install it on a device/emulator
-4. the browser will auto recognize the plugin is available
-
-Now that the plugin is installed you can manage it just like you would any other
-application via Settings -> Applications -> Manage applications. To execute the
-plugin you need to include an html snippet (similar to the one found below) in
-a document that is accessible by the browser. The mime-type cannot change but
-you can change the width, height, and parameters. The parameters are used to
-notify the plugin which sub-plugin to execute and which drawing model to use.
-
-<object type="application/x-testbrowserplugin" height=50 width=250>
- <param name="DrawingModel" value="Surface" />
- <param name="PluginType" value="Background" />
-</object>
-
-
-##############################
-## (D) SUB-PLUGINS ###########
-
-Each sub-plugin corresponds to exactly one plugin type and can support one or
-more drawing models. In the subsections below there are descriptions of each of
-the sub-plugins as well as the information required to create the html snippets.
-
-#######################
-## (D1) ANIMATION #####
-
-PLUGIN TYPE: Animation
-DRAWING MODEL: Bitmap
-
-This plugin draws a ball bouncing around the screen. If the plugin is not entirely
-on the screen and it it touched, then it will attempt to center itself on screen.
-
-#######################
-## (D2) AUDIO #########
-
-PLUGIN TYPE: Audio
-DRAWING MODEL: Bitmap
-
-This plugin plays a raw audio file located at /sdcard/sample.raw (need to supply
-your own). It uses touch to trigger the play, pause, and stop buttons.
-
-#######################
-## (D3) BACKGROUND ####
-
-PLUGIN TYPE: Background
-DRAWING MODEL: Surface
-
-This plugin has minimal visual components but mainly runs API tests in the
-background. The plugin handles scaling its own bitmap on zoom which in this
-case is a simple string of text. The output of this plugin is found in the logs
-as it prints errors if it detects any API failures. Some of the API's tested are
-timers, javascript access, and bitmap formatting.
-
-#######################
-## (D4) FORM ##########
-
-PLUGIN TYPE: Form
-DRAWING MODEL: Bitmap
-
-This plugin mimics a simple username/password form. You can select a textbox by
-either touching it or using the navigation keys. Once selected the box will
-highlight and the keyboard will appear. If the textbox selected is not fully
-in view then the plugin will ensure it is centered on the screen.
-
-#######################
-## (D5) PAINT #########
-
-PLUGIN TYPE: Paint
-DRAWING MODEL: Surface
-
-This plugin provides a surface that the user can "paint" on. The inputs method
-can be toggled between mouse (dots) and touch (lines). This plugin has a fixed
-surface and allows the browser to scale the surface when zooming.
diff --git a/samples/BrowserPlugin/jni/Android.mk b/samples/BrowserPlugin/jni/Android.mk
deleted file mode 100644
index d444bb0..0000000
--- a/samples/BrowserPlugin/jni/Android.mk
+++ /dev/null
@@ -1,68 +0,0 @@
-##
-##
-## Copyright 2008, The Android Open Source Project
-##
-## Redistribution and use in source and binary forms, with or without
-## modification, are permitted provided that the following conditions
-## are met:
-## * Redistributions of source code must retain the above copyright
-## notice, this list of conditions and the following disclaimer.
-## * Redistributions in binary form must reproduce the above copyright
-## notice, this list of conditions and the following disclaimer in the
-## documentation and/or other materials provided with the distribution.
-##
-## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
-## EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
-## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-## PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-## PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
-## OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-##
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
- main.cpp \
- PluginObject.cpp \
- animation/AnimationPlugin.cpp \
- audio/AudioPlugin.cpp \
- background/BackgroundPlugin.cpp \
- form/FormPlugin.cpp \
- navigation/NavigationPlugin.cpp \
- paint/PaintPlugin.cpp \
- video/VideoPlugin.cpp \
- jni-bridge.cpp \
-
-LOCAL_C_INCLUDES += \
- $(JNI_H_INCLUDE) \
- $(LOCAL_PATH) \
- $(LOCAL_PATH)/animation \
- $(LOCAL_PATH)/audio \
- $(LOCAL_PATH)/background \
- $(LOCAL_PATH)/form \
- $(LOCAL_PATH)/navigation \
- $(LOCAL_PATH)/paint \
- $(LOCAL_PATH)/video \
- external/webkit/WebCore/bridge \
- external/webkit/WebCore/plugins \
- external/webkit/WebCore/platform/android/JavaVM \
- external/webkit/WebKit/android/plugins
-
-LOCAL_SHARED_LIBRARIES := \
- libnativehelper
-
-LOCAL_CFLAGS += -fvisibility=hidden
-LOCAL_PRELINK_MODULE:=false
-
-LOCAL_MODULE:= libsampleplugin
-
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_SHARED_LIBRARY)
-
diff --git a/samples/BrowserPlugin/jni/PluginObject.cpp b/samples/BrowserPlugin/jni/PluginObject.cpp
deleted file mode 100644
index dd0fbac..0000000
--- a/samples/BrowserPlugin/jni/PluginObject.cpp
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
- consideration of your agreement to the following terms, and your use, installation,
- modification or redistribution of this Apple software constitutes acceptance of these
- terms. If you do not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject to these
- terms, Apple grants you a personal, non-exclusive license, under AppleÕs copyrights in
- this original Apple software (the "Apple Software"), to use, reproduce, modify and
- redistribute the Apple Software, with or without modifications, in source and/or binary
- forms; provided that if you redistribute the Apple Software in its entirety and without
- modifications, you must retain this notice and the following text and disclaimers in all
- such redistributions of the Apple Software. Neither the name, trademarks, service marks
- or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
- the Apple Software without specific prior written permission from Apple. Except as expressly
- stated in this notice, no other rights or licenses, express or implied, are granted by Apple
- herein, including but not limited to any patent rights that may be infringed by your
- derivative works or by other works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES,
- EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
- USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
- REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
- WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
- OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdlib.h>
-#include "main.h"
-#include "PluginObject.h"
-
-int SubPlugin::getPluginWidth() {
- PluginObject *obj = (PluginObject*) inst()->pdata;
- return obj->window->width;
-}
-
-int SubPlugin::getPluginHeight() {
- PluginObject *obj = (PluginObject*) inst()->pdata;
- return obj->window->height;
-}
-
-bool SurfaceSubPlugin::supportsDrawingModel(ANPDrawingModel model) {
- return (model == kSurface_ANPDrawingModel);
-}
-
-void SurfaceSubPlugin::setContext(jobject context) {
- JNIEnv* env = NULL;
- if (gVM->GetEnv((void**) &env, JNI_VERSION_1_4) == JNI_OK) {
-
- // if one exists then free its global reference
- if (m_context) {
- env->DeleteGlobalRef(m_context);
- m_context = NULL;
- }
-
- // create a new global ref
- if (context) {
- context = env->NewGlobalRef(context);
- }
-
- // set the value
- m_context = context;
- }
-}
-
-static void pluginInvalidate(NPObject *obj);
-static bool pluginHasProperty(NPObject *obj, NPIdentifier name);
-static bool pluginHasMethod(NPObject *obj, NPIdentifier name);
-static bool pluginGetProperty(NPObject *obj, NPIdentifier name, NPVariant *variant);
-static bool pluginSetProperty(NPObject *obj, NPIdentifier name, const NPVariant *variant);
-static bool pluginInvoke(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result);
-static bool pluginInvokeDefault(NPObject *obj, const NPVariant *args, uint32_t argCount, NPVariant *result);
-static NPObject *pluginAllocate(NPP npp, NPClass *theClass);
-static void pluginDeallocate(NPObject *obj);
-static bool pluginRemoveProperty(NPObject *npobj, NPIdentifier name);
-static bool pluginEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count);
-
-
-
-static NPClass pluginClass = {
- NP_CLASS_STRUCT_VERSION,
- pluginAllocate,
- pluginDeallocate,
- pluginInvalidate,
- pluginHasMethod,
- pluginInvoke,
- pluginInvokeDefault,
- pluginHasProperty,
- pluginGetProperty,
- pluginSetProperty,
- pluginRemoveProperty,
- pluginEnumerate
-};
-
-NPClass *getPluginClass(void)
-{
- return &pluginClass;
-}
-
-static bool identifiersInitialized = false;
-
-#define ID_TESTFILE_PROPERTY 0
-#define NUM_PROPERTY_IDENTIFIERS 1
-
-static NPIdentifier pluginPropertyIdentifiers[NUM_PROPERTY_IDENTIFIERS];
-static const NPUTF8 *pluginPropertyIdentifierNames[NUM_PROPERTY_IDENTIFIERS] = {
- "testfile"
-};
-
-#define ID_GETTESTFILE_METHOD 0
-#define NUM_METHOD_IDENTIFIERS 1
-
-static NPIdentifier pluginMethodIdentifiers[NUM_METHOD_IDENTIFIERS];
-static const NPUTF8 *pluginMethodIdentifierNames[NUM_METHOD_IDENTIFIERS] = {
- "getTestFile"
-};
-
-static void initializeIdentifiers(void)
-{
- browser->getstringidentifiers(pluginPropertyIdentifierNames, NUM_PROPERTY_IDENTIFIERS, pluginPropertyIdentifiers);
- browser->getstringidentifiers(pluginMethodIdentifierNames, NUM_METHOD_IDENTIFIERS, pluginMethodIdentifiers);
-}
-
-static bool pluginHasProperty(NPObject *obj, NPIdentifier name)
-{
- int i;
- for (i = 0; i < NUM_PROPERTY_IDENTIFIERS; i++)
- if (name == pluginPropertyIdentifiers[i])
- return true;
- return false;
-}
-
-static bool pluginHasMethod(NPObject *obj, NPIdentifier name)
-{
- int i;
- for (i = 0; i < NUM_METHOD_IDENTIFIERS; i++)
- if (name == pluginMethodIdentifiers[i])
- return true;
- return false;
-}
-
-static bool pluginGetProperty(NPObject *obj, NPIdentifier name, NPVariant *variant)
-{
- PluginObject *plugin = (PluginObject *)obj;
- if (name == pluginPropertyIdentifiers[ID_TESTFILE_PROPERTY]) {
- BOOLEAN_TO_NPVARIANT(true, *variant);
- return true;
- }
- return false;
-}
-
-static bool pluginSetProperty(NPObject *obj, NPIdentifier name, const NPVariant *variant)
-{
- return false;
-}
-
-static bool pluginInvoke(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result)
-{
- PluginObject *plugin = (PluginObject *)obj;
- if (name == pluginMethodIdentifiers[ID_GETTESTFILE_METHOD]) {
- return true;
- }
- return false;
-}
-
-static bool pluginInvokeDefault(NPObject *obj, const NPVariant *args, uint32_t argCount, NPVariant *result)
-{
- return false;
-}
-
-static void pluginInvalidate(NPObject *obj)
-{
- // Release any remaining references to JavaScript objects.
-}
-
-static NPObject *pluginAllocate(NPP npp, NPClass *theClass)
-{
- PluginObject *newInstance = (PluginObject*) malloc(sizeof(PluginObject));
- newInstance->header._class = theClass;
- newInstance->header.referenceCount = 1;
-
- if (!identifiersInitialized) {
- identifiersInitialized = true;
- initializeIdentifiers();
- }
-
- newInstance->npp = npp;
-
- return &newInstance->header;
-}
-
-static void pluginDeallocate(NPObject *obj)
-{
- free(obj);
-}
-
-static bool pluginRemoveProperty(NPObject *npobj, NPIdentifier name)
-{
- return false;
-}
-
-static bool pluginEnumerate(NPObject *npobj, NPIdentifier **value, uint32_t *count)
-{
- return false;
-}
diff --git a/samples/BrowserPlugin/jni/PluginObject.h b/samples/BrowserPlugin/jni/PluginObject.h
deleted file mode 100644
index 0ebed28..0000000
--- a/samples/BrowserPlugin/jni/PluginObject.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- IMPORTANT: This Apple software is supplied to you by Apple Computer, Inc. ("Apple") in
- consideration of your agreement to the following terms, and your use, installation,
- modification or redistribution of this Apple software constitutes acceptance of these
- terms. If you do not agree with these terms, please do not use, install, modify or
- redistribute this Apple software.
-
- In consideration of your agreement to abide by the following terms, and subject to these
- terms, Apple grants you a personal, non-exclusive license, under Apple�s copyrights in
- this original Apple software (the "Apple Software"), to use, reproduce, modify and
- redistribute the Apple Software, with or without modifications, in source and/or binary
- forms; provided that if you redistribute the Apple Software in its entirety and without
- modifications, you must retain this notice and the following text and disclaimers in all
- such redistributions of the Apple Software. Neither the name, trademarks, service marks
- or logos of Apple Computer, Inc. may be used to endorse or promote products derived from
- the Apple Software without specific prior written permission from Apple. Except as expressly
- stated in this notice, no other rights or licenses, express or implied, are granted by Apple
- herein, including but not limited to any patent rights that may be infringed by your
- derivative works or by other works in which the Apple Software may be incorporated.
-
- The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO WARRANTIES,
- EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF NON-INFRINGEMENT,
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS
- USE AND OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
-
- IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE,
- REPRODUCTION, MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND
- WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR
- OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef PluginObject__DEFINED
-#define PluginObject__DEFINED
-
-#include "main.h"
-#include <jni.h>
-
-enum CustomEventTypes {
- kSurfaceCreated_CustomEvent = 0,
- kSurfaceChanged_CustomEvent = 1,
- kSurfaceDestroyed_CustomEvent = 2,
-};
-typedef int32_t CustomEventType;
-
-class SubPlugin {
-public:
- SubPlugin(NPP inst) : m_inst(inst) {}
- virtual ~SubPlugin() {}
- virtual int16 handleEvent(const ANPEvent* evt) = 0;
- virtual bool supportsDrawingModel(ANPDrawingModel) = 0;
-
- int getPluginWidth();
- int getPluginHeight();
-
- NPP inst() const { return m_inst; }
-
-private:
- NPP m_inst;
-};
-
-class SurfaceSubPlugin : public SubPlugin {
-public:
- SurfaceSubPlugin(NPP inst) : SubPlugin(inst) { m_context = NULL; }
- virtual ~SurfaceSubPlugin() {}
- virtual jobject getSurface() = 0;
- virtual bool supportsDrawingModel(ANPDrawingModel);
-
- void setContext(jobject context);
-
- jobject m_context;
-};
-
-enum PluginTypes {
- kAnimation_PluginType = 1,
- kAudio_PluginType = 2,
- kBackground_PluginType = 3,
- kForm_PluginType = 4,
- kText_PluginType = 5,
- kPaint_PluginType = 6,
- kVideo_PluginType = 7,
- kNavigation_PluginType = 8,
-};
-typedef uint32_t PluginType;
-
-typedef struct PluginObject {
- NPObject header;
- NPP npp;
- NPWindow* window;
-
- PluginType pluginType;
- SubPlugin* activePlugin;
-
-} PluginObject;
-
-NPClass *getPluginClass(void);
-
-#endif // PluginObject__DEFINED
diff --git a/samples/BrowserPlugin/jni/animation/AnimationPlugin.cpp b/samples/BrowserPlugin/jni/animation/AnimationPlugin.cpp
deleted file mode 100644
index 72a11c9..0000000
--- a/samples/BrowserPlugin/jni/animation/AnimationPlugin.cpp
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "AnimationPlugin.h"
-
-#include <math.h>
-#include <string.h>
-
-extern NPNetscapeFuncs* browser;
-extern ANPLogInterfaceV0 gLogI;
-extern ANPCanvasInterfaceV0 gCanvasI;
-extern ANPPaintInterfaceV0 gPaintI;
-extern ANPPathInterfaceV0 gPathI;
-extern ANPWindowInterfaceV0 gWindowI;
-
-static uint16 rnd16(float x, int inset) {
- int ix = (int)roundf(x) + inset;
- if (ix < 0) {
- ix = 0;
- }
- return static_cast<uint16>(ix);
-}
-
-static void inval(NPP instance, const ANPRectF& r, bool doAA) {
- const int inset = doAA ? -1 : 0;
-
- NPRect inval;
- inval.left = rnd16(r.left, inset);
- inval.top = rnd16(r.top, inset);
- inval.right = rnd16(r.right, -inset);
- inval.bottom = rnd16(r.bottom, -inset);
- browser->invalidaterect(instance, &inval);
-}
-
-static void bounce(float* x, float* dx, const float max) {
- *x += *dx;
- if (*x < 0) {
- *x = 0;
- if (*dx < 0) {
- *dx = -*dx;
- }
- } else if (*x > max) {
- *x = max;
- if (*dx > 0) {
- *dx = -*dx;
- }
- }
-}
-///////////////////////////////////////////////////////////////////////////////
-
-BallAnimation::BallAnimation(NPP inst) : SubPlugin(inst) {
- m_x = m_y = 0;
- m_dx = 7 * SCALE;
- m_dy = 5 * SCALE;
-
- memset(&m_oval, 0, sizeof(m_oval));
-
- m_paint = gPaintI.newPaint();
- gPaintI.setFlags(m_paint, gPaintI.getFlags(m_paint) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paint, 0xFFFF0000);
-
- //register for touch events
- ANPEventFlags flags = kTouch_ANPEventFlag;
- NPError err = browser->setvalue(inst, kAcceptEvents_ANPSetValue, &flags);
- if (err != NPERR_NO_ERROR) {
- gLogI.log(kError_ANPLogType, "Error selecting input events.");
- }
-}
-
-BallAnimation::~BallAnimation() {
- gPaintI.deletePaint(m_paint);
-}
-
-bool BallAnimation::supportsDrawingModel(ANPDrawingModel model) {
- return (model == kBitmap_ANPDrawingModel);
-}
-
-void BallAnimation::drawPlugin(const ANPBitmap& bitmap, const ANPRectI& clip) {
-
- // create a canvas
- ANPCanvas* canvas = gCanvasI.newCanvas(&bitmap);
-
- // clip the canvas
- ANPRectF clipR;
- clipR.left = clip.left;
- clipR.top = clip.top;
- clipR.right = clip.right;
- clipR.bottom = clip.bottom;
- gCanvasI.clipRect(canvas, &clipR);
-
- // setup variables
- PluginObject *obj = (PluginObject*) inst()->pdata;
- const float OW = 20;
- const float OH = 20;
- const int W = obj->window->width;
- const int H = obj->window->height;
-
- // paint the canvas (using the path API)
- gCanvasI.drawColor(canvas, 0xFFFFFFFF);
- {
- ANPPath* path = gPathI.newPath();
-
- float cx = W * 0.5f;
- float cy = H * 0.5f;
- gPathI.moveTo(path, 0, 0);
- gPathI.quadTo(path, cx, cy, W, 0);
- gPathI.quadTo(path, cx, cy, W, H);
- gPathI.quadTo(path, cx, cy, 0, H);
- gPathI.quadTo(path, cx, cy, 0, 0);
-
- gPaintI.setColor(m_paint, 0xFF0000FF);
- gCanvasI.drawPath(canvas, path, m_paint);
-
- ANPRectF bounds;
- memset(&bounds, 0, sizeof(bounds));
- gPathI.getBounds(path, &bounds);
- gPathI.deletePath(path);
- }
-
- // draw the oval
- inval(inst(), m_oval, true); // inval the old
- m_oval.left = m_x;
- m_oval.top = m_y;
- m_oval.right = m_x + OW;
- m_oval.bottom = m_y + OH;
- inval(inst(), m_oval, true); // inval the new
- gPaintI.setColor(m_paint, 0xFFFF0000);
- gCanvasI.drawOval(canvas, &m_oval, m_paint);
-
- // update the coordinates of the oval
- bounce(&m_x, &m_dx, obj->window->width - OW);
- bounce(&m_y, &m_dy, obj->window->height - OH);
-
- // delete the canvas
- gCanvasI.deleteCanvas(canvas);
-}
-
-void BallAnimation::showEntirePluginOnScreen() {
- NPP instance = this->inst();
- PluginObject *obj = (PluginObject*) instance->pdata;
- NPWindow *window = obj->window;
-
- ANPRectI visibleRects[1];
-
- visibleRects[0].left = 0;
- visibleRects[0].top = 0;
- visibleRects[0].right = window->width;
- visibleRects[0].bottom = window->height;
-
- gWindowI.setVisibleRects(instance, visibleRects, 1);
- gWindowI.clearVisibleRects(instance);
-}
-
-int16 BallAnimation::handleEvent(const ANPEvent* evt) {
- NPP instance = this->inst();
-
- switch (evt->eventType) {
- case kDraw_ANPEventType:
- switch (evt->data.draw.model) {
- case kBitmap_ANPDrawingModel:
- drawPlugin(evt->data.draw.data.bitmap, evt->data.draw.clip);
- return 1;
- default:
- break; // unknown drawing model
- }
- case kTouch_ANPEventType:
- if (kDown_ANPTouchAction == evt->data.touch.action) {
- showEntirePluginOnScreen();
- }
- return 1;
- default:
- break;
- }
- return 0; // unknown or unhandled event
-}
diff --git a/samples/BrowserPlugin/jni/animation/AnimationPlugin.h b/samples/BrowserPlugin/jni/animation/AnimationPlugin.h
deleted file mode 100644
index ef2a3f54..0000000
--- a/samples/BrowserPlugin/jni/animation/AnimationPlugin.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "PluginObject.h"
-
-#ifndef pluginGraphics__DEFINED
-#define pluginGraphics__DEFINED
-
-class BallAnimation : public SubPlugin {
-public:
- BallAnimation(NPP inst);
- virtual ~BallAnimation();
- virtual bool supportsDrawingModel(ANPDrawingModel);
- virtual int16 handleEvent(const ANPEvent* evt);
-private:
- void drawPlugin(const ANPBitmap& bitmap, const ANPRectI& clip);
- void showEntirePluginOnScreen();
-
- float m_x;
- float m_y;
- float m_dx;
- float m_dy;
-
- ANPRectF m_oval;
- ANPPaint* m_paint;
-
- static const float SCALE = 0.1;
-};
-
-#endif // pluginGraphics__DEFINED
diff --git a/samples/BrowserPlugin/jni/audio/AudioPlugin.cpp b/samples/BrowserPlugin/jni/audio/AudioPlugin.cpp
deleted file mode 100644
index 9731f19..0000000
--- a/samples/BrowserPlugin/jni/audio/AudioPlugin.cpp
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "AudioPlugin.h"
-
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <time.h>
-#include <math.h>
-#include <string.h>
-
-extern NPNetscapeFuncs* browser;
-extern ANPLogInterfaceV0 gLogI;
-extern ANPCanvasInterfaceV0 gCanvasI;
-extern ANPPaintInterfaceV0 gPaintI;
-extern ANPAudioTrackInterfaceV0 gSoundI;
-extern ANPTypefaceInterfaceV0 gTypefaceI;
-
-
-static void inval(NPP instance) {
- browser->invalidaterect(instance, NULL);
-}
-
-static uint16 rnd16(float x, int inset) {
- int ix = (int)roundf(x) + inset;
- if (ix < 0) {
- ix = 0;
- }
- return static_cast<uint16>(ix);
-}
-
-static void inval(NPP instance, const ANPRectF& r, bool doAA) {
- const int inset = doAA ? -1 : 0;
-
- PluginObject *obj = reinterpret_cast<PluginObject*>(instance->pdata);
- NPRect inval;
- inval.left = rnd16(r.left, inset);
- inval.top = rnd16(r.top, inset);
- inval.right = rnd16(r.right, -inset);
- inval.bottom = rnd16(r.bottom, -inset);
- browser->invalidaterect(instance, &inval);
-}
-
-static void audioCallback(ANPAudioEvent evt, void* user, ANPAudioBuffer* buffer) {
- switch (evt) {
- case kMoreData_ANPAudioEvent: {
- SoundPlay* play = reinterpret_cast<SoundPlay*>(user);
- size_t amount = fread(buffer->bufferData, 1, buffer->size, play->file);
- buffer->size = amount;
- if (amount == 0) {
- gSoundI.stop(play->track);
- fclose(play->file);
- play->file = NULL;
- // TODO need to notify our main thread to delete the track now
- }
-
- if (play->fileSize > 0) {
- // TODO we need to properly update the progress value
- play->progress = 1;
- inval(play->instance);
- }
-
-
- break;
- }
- default:
- break;
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-AudioPlugin::AudioPlugin(NPP inst) : SubPlugin(inst) {
-
- const char path[] = "/sdcard/sample.raw";
-
- // open a file stream
- FILE* f = fopen(path, "r");
- gLogI.log(kDebug_ANPLogType, "--- path %s FILE %p", path, f);
-
- // setup our private audio struct's default values
- m_soundPlay = new SoundPlay;
- m_soundPlay->instance = inst;
- m_soundPlay->progress = 0;
- m_soundPlay->fileSize = 0;
- m_soundPlay->file = f;
- m_soundPlay->track = NULL;
-
- // create the audio track
- if (f) {
- m_soundPlay->track = gSoundI.newTrack(44100, kPCM16Bit_ANPSampleFormat, 2, audioCallback, m_soundPlay);
- if (!m_soundPlay->track) {
- fclose(f);
- m_soundPlay->file = NULL;
- }
- }
-
- // get the audio file's size
- int fileDescriptor = open(path, O_RDONLY);
- struct stat fileStatus;
-
- if(fileDescriptor <= 0) {
- gLogI.log(kError_ANPLogType, "fopen error");
- }
- else if (fstat(fileDescriptor, &fileStatus) != 0) {
- gLogI.log(kDebug_ANPLogType, "File Size: %d", fileStatus.st_size);
- m_soundPlay->fileSize = fileStatus.st_size;
- } else {
- gLogI.log(kError_ANPLogType, "fstat error");
- }
-
- // configure the UI elements
- m_activeTouch = false;
-
- memset(&m_trackRect, 0, sizeof(m_trackRect));
- memset(&m_playRect, 0, sizeof(m_playRect));
- memset(&m_pauseRect, 0, sizeof(m_pauseRect));
- memset(&m_stopRect, 0, sizeof(m_stopRect));
-
- m_paintTrack = gPaintI.newPaint();
- gPaintI.setFlags(m_paintTrack, gPaintI.getFlags(m_paintTrack) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paintTrack, 0xFFC0C0C0);
-
- m_paintRect = gPaintI.newPaint();
- gPaintI.setFlags(m_paintRect, gPaintI.getFlags(m_paintRect) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paintRect, 0xFFA8A8A8);
-
- m_paintText = gPaintI.newPaint();
- gPaintI.setFlags(m_paintText, gPaintI.getFlags(m_paintText) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paintText, 0xFF2F4F4F);
- gPaintI.setTextSize(m_paintText, 18);
-
- m_paintTrackProgress = gPaintI.newPaint();
- gPaintI.setFlags(m_paintTrackProgress, gPaintI.getFlags(m_paintTrackProgress) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paintTrackProgress, 0xFF545454);
-
- m_paintActiveRect = gPaintI.newPaint();
- gPaintI.setFlags(m_paintActiveRect, gPaintI.getFlags(m_paintActiveRect) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paintActiveRect, 0xFF545454);
-
- ANPTypeface* tf = gTypefaceI.createFromName("serif", kItalic_ANPTypefaceStyle);
- gPaintI.setTypeface(m_paintText, tf);
- gTypefaceI.unref(tf);
-
- //register for touch events
- ANPEventFlags flags = kTouch_ANPEventFlag;
- NPError err = browser->setvalue(inst, kAcceptEvents_ANPSetValue, &flags);
- if (err != NPERR_NO_ERROR) {
- gLogI.log(kError_ANPLogType, "Error selecting input events.");
- }
-}
-
-AudioPlugin::~AudioPlugin() {
- gPaintI.deletePaint(m_paintTrack);
- gPaintI.deletePaint(m_paintRect);
- gPaintI.deletePaint(m_paintText);
- gPaintI.deletePaint(m_paintTrackProgress);
- gPaintI.deletePaint(m_paintActiveRect);
- if(m_soundPlay->track)
- gSoundI.deleteTrack(m_soundPlay->track);
- delete m_soundPlay;
-}
-
-bool AudioPlugin::supportsDrawingModel(ANPDrawingModel model) {
- return (model == kBitmap_ANPDrawingModel);
-}
-
-void AudioPlugin::drawPlugin(const ANPBitmap& bitmap, const ANPRectI& clip) {
- ANPCanvas* canvas = gCanvasI.newCanvas(&bitmap);
-
- ANPRectF clipR;
- clipR.left = clip.left;
- clipR.top = clip.top;
- clipR.right = clip.right;
- clipR.bottom = clip.bottom;
- gCanvasI.clipRect(canvas, &clipR);
-
- draw(canvas);
- gCanvasI.deleteCanvas(canvas);
-}
-
-void AudioPlugin::draw(ANPCanvas* canvas) {
-
- PluginObject *obj = (PluginObject*) this->inst()->pdata;
-
- gLogI.log(kError_ANPLogType, "Drawing");
-
- const float trackHeight = 30;
- const float buttonWidth = 60;
- const float buttonHeight = 30;
- const int W = obj->window->width;
- const int H = obj->window->height;
-
- // color the plugin canvas
- gCanvasI.drawColor(canvas, 0xFFCDCDCD);
-
- // get font metrics
- ANPFontMetrics fontMetrics;
- gPaintI.getFontMetrics(m_paintText, &fontMetrics);
-
- // draw the track box (1 px from the edge)
- m_trackRect.left = 1;
- m_trackRect.top = 1;
- m_trackRect.right = W - 2;
- m_trackRect.bottom = 1 + trackHeight;
- gCanvasI.drawRect(canvas, &m_trackRect, m_paintTrack);
-
- // draw the progress bar
- if (m_soundPlay->progress > 0) {
- // TODO need to draw progress bar to cover the proper percentage of the track bar
- gCanvasI.drawRect(canvas, &m_trackRect, m_paintTrackProgress);
- }
-
- // draw the play box (under track box)
- m_playRect.left = m_trackRect.left + 5;
- m_playRect.top = m_trackRect.bottom + 10;
- m_playRect.right = m_playRect.left + buttonWidth;
- m_playRect.bottom = m_playRect.top + buttonHeight;
- gCanvasI.drawRect(canvas, &m_playRect, getPaint(&m_playRect));
- // draw the play box (under track box)
- const char playText[] = "Play";
- gCanvasI.drawText(canvas, playText, sizeof(playText)-1, m_playRect.left + 5,
- m_playRect.top - fontMetrics.fTop, m_paintText);
-
- // draw the pause box (under track box)
- m_pauseRect.left = m_playRect.right + 20;
- m_pauseRect.top = m_trackRect.bottom + 10;
- m_pauseRect.right = m_pauseRect.left + buttonWidth;
- m_pauseRect.bottom = m_pauseRect.top + buttonHeight;
- gCanvasI.drawRect(canvas, &m_pauseRect, getPaint(&m_pauseRect));
- // draw the text in the pause box
- const char pauseText[] = "Pause";
- gCanvasI.drawText(canvas, pauseText, sizeof(pauseText)-1, m_pauseRect.left + 5,
- m_pauseRect.top - fontMetrics.fTop, m_paintText);
-
- // draw the stop box (under track box)
- m_stopRect.left = m_pauseRect.right + 20;
- m_stopRect.top = m_trackRect.bottom + 10;
- m_stopRect.right = m_stopRect.left + buttonWidth;
- m_stopRect.bottom = m_stopRect.top + buttonHeight;
- gCanvasI.drawRect(canvas, &m_stopRect, getPaint(&m_stopRect));
- // draw the text in the pause box
- const char stopText[] = "Stop";
- gCanvasI.drawText(canvas, stopText, sizeof(stopText)-1, m_stopRect.left + 5,
- m_stopRect.top - fontMetrics.fTop, m_paintText);
-}
-
-ANPPaint* AudioPlugin::getPaint(ANPRectF* input) {
- return (input == m_activeRect) ? m_paintActiveRect : m_paintRect;
-}
-
-int16 AudioPlugin::handleEvent(const ANPEvent* evt) {
- NPP instance = this->inst();
-
- switch (evt->eventType) {
- case kDraw_ANPEventType:
- switch (evt->data.draw.model) {
- case kBitmap_ANPDrawingModel:
- drawPlugin(evt->data.draw.data.bitmap, evt->data.draw.clip);
- return 1;
- default:
- break; // unknown drawing model
- }
-
- case kTouch_ANPEventType: {
- int x = evt->data.touch.x;
- int y = evt->data.touch.y;
- if (kDown_ANPTouchAction == evt->data.touch.action) {
-
- m_activeTouchRect = validTouch(x,y);
- if(m_activeTouchRect) {
- m_activeTouch = true;
- return 1;
- }
-
- } else if (kUp_ANPTouchAction == evt->data.touch.action && m_activeTouch) {
- handleTouch(x, y);
- m_activeTouch = false;
- return 1;
- } else if (kCancel_ANPTouchAction == evt->data.touch.action) {
- m_activeTouch = false;
- }
- break;
- }
- default:
- break;
- }
- return 0; // unknown or unhandled event
-}
-
-void AudioPlugin::invalActiveRect() {
-
-}
-
-ANPRectF* AudioPlugin::validTouch(int x, int y) {
-
- if (m_playRect.left && x < m_playRect.right && y > m_playRect.top && y < m_playRect.bottom)
- return &m_playRect;
- else if (m_pauseRect.left && x < m_pauseRect.right && y > m_pauseRect.top && y < m_pauseRect.bottom)
- return &m_pauseRect;
- else if (x > m_stopRect.left && x < m_stopRect.right && y > m_stopRect.top && y < m_stopRect.bottom)
- return &m_stopRect;
- else
- return NULL;
-}
-
-void AudioPlugin::handleTouch(int x, int y) {
- NPP instance = this->inst();
-
- // if the track is null then return
- if (NULL == m_soundPlay->track) {
- gLogI.log(kError_ANPLogType, "---- %p unable to create track",
- instance);
- return;
- }
-
- // check to make sure the currentRect matches the activeRect
- ANPRectF* currentRect = validTouch(x,y);
- if (m_activeTouchRect != currentRect)
- return;
-
- if (currentRect == &m_playRect) {
-
- gLogI.log(kDebug_ANPLogType, "---- %p starting track (%d)",
- m_soundPlay->track, gSoundI.isStopped(m_soundPlay->track));
-
- if (gSoundI.isStopped(m_soundPlay->track)) {
- gSoundI.start(m_soundPlay->track);
- }
- }
- else if (currentRect == &m_pauseRect) {
-
- gLogI.log(kDebug_ANPLogType, "---- %p pausing track (%d)",
- m_soundPlay->track, gSoundI.isStopped(m_soundPlay->track));
-
- if (!gSoundI.isStopped(m_soundPlay->track)) {
- gSoundI.pause(m_soundPlay->track);
- }
- }
- else if (currentRect == &m_stopRect) {
-
- gLogI.log(kDebug_ANPLogType, "---- %p stopping track (%d)",
- m_soundPlay->track, gSoundI.isStopped(m_soundPlay->track));
-
- if (!gSoundI.isStopped(m_soundPlay->track)) {
- gSoundI.stop(m_soundPlay->track);
- }
- if (m_soundPlay->file) {
- fseek(m_soundPlay->file, 0, SEEK_SET);
- }
- }
- else {
- return;
- }
-
- // set the currentRect to be the activeRect
- m_activeRect = currentRect;
- inval(instance);
-}
diff --git a/samples/BrowserPlugin/jni/audio/AudioPlugin.h b/samples/BrowserPlugin/jni/audio/AudioPlugin.h
deleted file mode 100644
index 129d33a..0000000
--- a/samples/BrowserPlugin/jni/audio/AudioPlugin.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "PluginObject.h"
-#include <stdio.h>
-
-#ifndef audioPlugin__DEFINED
-#define audioPlugin__DEFINED
-
-struct SoundPlay {
- NPP instance;
- ANPAudioTrack* track;
- FILE* file;
- int fileSize;
- int progress; // value between 0 and 100
-};
-
-class AudioPlugin : public SubPlugin {
-public:
- AudioPlugin(NPP inst);
- virtual ~AudioPlugin();
- virtual bool supportsDrawingModel(ANPDrawingModel);
- virtual int16 handleEvent(const ANPEvent* evt);
-private:
- void draw(ANPCanvas*);
- void drawPlugin(const ANPBitmap& bitmap, const ANPRectI& clip);
-
- void handleTouch(int x, int y);
- void invalActiveRect();
- ANPPaint* getPaint(ANPRectF*);
- ANPRectF* validTouch(int x, int y);
-
- ANPRectF m_trackRect;
- ANPRectF m_playRect;
- ANPRectF m_pauseRect;
- ANPRectF m_stopRect;
-
- ANPPaint* m_paintTrack;
- ANPPaint* m_paintRect;
- ANPPaint* m_paintText;
-
- ANPPaint* m_paintTrackProgress;
- ANPPaint* m_paintActiveRect;
-
- SoundPlay* m_soundPlay;
-
- bool m_activeTouch;
- ANPRectF* m_activeTouchRect;
- ANPRectF* m_activeRect;
-};
-
-#endif // audioPlugin__DEFINED
diff --git a/samples/BrowserPlugin/jni/background/BackgroundPlugin.cpp b/samples/BrowserPlugin/jni/background/BackgroundPlugin.cpp
deleted file mode 100644
index f749639..0000000
--- a/samples/BrowserPlugin/jni/background/BackgroundPlugin.cpp
+++ /dev/null
@@ -1,499 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "BackgroundPlugin.h"
-#include "android_npapi.h"
-
-#include <stdio.h>
-#include <sys/time.h>
-#include <time.h>
-#include <math.h>
-#include <string.h>
-
-extern NPNetscapeFuncs* browser;
-extern ANPBitmapInterfaceV0 gBitmapI;
-extern ANPCanvasInterfaceV0 gCanvasI;
-extern ANPLogInterfaceV0 gLogI;
-extern ANPPaintInterfaceV0 gPaintI;
-extern ANPSurfaceInterfaceV0 gSurfaceI;
-extern ANPSystemInterfaceV0 gSystemI;
-extern ANPTypefaceInterfaceV0 gTypefaceI;
-extern ANPWindowInterfaceV0 gWindowI;
-
-#define ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0]))
-
-static uint32_t getMSecs() {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- return (uint32_t) (tv.tv_sec * 1000 + tv.tv_usec / 1000 ); // microseconds to milliseconds
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-BackgroundPlugin::BackgroundPlugin(NPP inst) : SurfaceSubPlugin(inst) {
-
- // initialize the drawing surface
- m_surface = NULL;
-
- //initialize bitmap transparency variables
- mFinishedStageOne = false;
- mFinishedStageTwo = false;
- mFinishedStageThree = false;
-
- // test basic plugin functionality
- test_logging(); // android logging
- test_timers(); // plugin timers
- test_bitmaps(); // android bitmaps
- test_domAccess();
- test_javascript();
- test_loadJavaClass();
-
- //register for touch events
- ANPEventFlags flags = kTouch_ANPEventFlag;
- NPError err = browser->setvalue(inst, kAcceptEvents_ANPSetValue, &flags);
- if (err != NPERR_NO_ERROR) {
- gLogI.log(kError_ANPLogType, "Error selecting input events.");
- }
-}
-
-BackgroundPlugin::~BackgroundPlugin() {
- setContext(NULL);
- destroySurface();
-}
-
-jobject BackgroundPlugin::getSurface() {
-
- if (m_surface) {
- return m_surface;
- }
-
- // load the appropriate java class and instantiate it
- JNIEnv* env = NULL;
- if (gVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- gLogI.log(kError_ANPLogType, " ---- getSurface: failed to get env");
- return NULL;
- }
-
- const char* className = "com.android.sampleplugin.BackgroundSurface";
- jclass backgroundClass = gSystemI.loadJavaClass(inst(), className);
-
- if(!backgroundClass) {
- gLogI.log(kError_ANPLogType, " ---- getSurface: failed to load class");
- return NULL;
- }
-
- jmethodID constructor = env->GetMethodID(backgroundClass, "<init>", "(Landroid/content/Context;)V");
- jobject backgroundSurface = env->NewObject(backgroundClass, constructor, m_context);
-
- if(!backgroundSurface) {
- gLogI.log(kError_ANPLogType, " ---- getSurface: failed to construct object");
- return NULL;
- }
-
- m_surface = env->NewGlobalRef(backgroundSurface);
- return m_surface;
-}
-
-void BackgroundPlugin::destroySurface() {
- JNIEnv* env = NULL;
- if (m_surface && gVM->GetEnv((void**) &env, JNI_VERSION_1_4) == JNI_OK) {
- env->DeleteGlobalRef(m_surface);
- m_surface = NULL;
- }
-}
-
-void BackgroundPlugin::drawPlugin(int surfaceWidth, int surfaceHeight) {
-
- // get the plugin's dimensions according to the DOM
- PluginObject *obj = (PluginObject*) inst()->pdata;
- const int W = obj->window->width;
- const int H = obj->window->height;
-
- // compute the current zoom level
- const float zoomFactorW = static_cast<float>(surfaceWidth) / W;
- const float zoomFactorH = static_cast<float>(surfaceHeight) / H;
-
- // check to make sure the zoom level is uniform
- if (zoomFactorW + .01 < zoomFactorH && zoomFactorW - .01 > zoomFactorH)
- gLogI.log(kError_ANPLogType, " ------ %p zoom is out of sync (%f,%f)",
- inst(), zoomFactorW, zoomFactorH);
-
- // scale the variables based on the zoom level
- const int fontSize = (int)(zoomFactorW * 16);
- const int leftMargin = (int)(zoomFactorW * 10);
-
- // lock the surface
- ANPBitmap bitmap;
- JNIEnv* env = NULL;
- if (!m_surface || gVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK ||
- !gSurfaceI.lock(env, m_surface, &bitmap, NULL)) {
- gLogI.log(kError_ANPLogType, " ------ %p unable to lock the plugin", inst());
- return;
- }
-
- // create a canvas
- ANPCanvas* canvas = gCanvasI.newCanvas(&bitmap);
- gCanvasI.drawColor(canvas, 0xFFFFFFFF);
-
- ANPPaint* paint = gPaintI.newPaint();
- gPaintI.setFlags(paint, gPaintI.getFlags(paint) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(paint, 0xFFFF0000);
- gPaintI.setTextSize(paint, fontSize);
-
- ANPTypeface* tf = gTypefaceI.createFromName("serif", kItalic_ANPTypefaceStyle);
- gPaintI.setTypeface(paint, tf);
- gTypefaceI.unref(tf);
-
- ANPFontMetrics fm;
- gPaintI.getFontMetrics(paint, &fm);
-
- gPaintI.setColor(paint, 0xFF0000FF);
- const char c[] = "This is a background plugin.";
- gCanvasI.drawText(canvas, c, sizeof(c)-1, leftMargin, -fm.fTop, paint);
-
- // clean up variables and unlock the surface
- gPaintI.deletePaint(paint);
- gCanvasI.deleteCanvas(canvas);
- gSurfaceI.unlock(env, m_surface);
-}
-
-int16 BackgroundPlugin::handleEvent(const ANPEvent* evt) {
- switch (evt->eventType) {
- case kDraw_ANPEventType:
- gLogI.log(kError_ANPLogType, " ------ %p the plugin did not request draw events", inst());
- break;
- case kLifecycle_ANPEventType:
- switch (evt->data.lifecycle.action) {
- case kOnLoad_ANPLifecycleAction:
- gLogI.log(kDebug_ANPLogType, " ------ %p onLoad", inst());
- return 1;
- case kOnScreen_ANPLifecycleAction:
- gLogI.log(kDebug_ANPLogType, " ------ %p onScreen", inst());
- return 1;
- case kOffScreen_ANPLifecycleAction:
- gLogI.log(kDebug_ANPLogType, " ------ %p offScreen", inst());
- return 1;
- }
- break; // end kLifecycle_ANPEventType
- case kTouch_ANPEventType:
- if (kLongPress_ANPTouchAction == evt->data.touch.action) {
- browser->geturl(inst(), "javascript:alert('Detected long press event.')", 0);
- gWindowI.requestFullScreen(inst());
- }
- else if (kDoubleTap_ANPTouchAction == evt->data.touch.action)
- browser->geturl(inst(), "javascript:alert('Detected double tap event.')", 0);
- break;
- case kKey_ANPEventType:
- gLogI.log(kError_ANPLogType, " ------ %p the plugin did not request key events", inst());
- break;
- default:
- break;
- }
- return 0; // unknown or unhandled event
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// LOGGING TESTS
-///////////////////////////////////////////////////////////////////////////////
-
-
-void BackgroundPlugin::test_logging() {
- NPP instance = this->inst();
-
- //LOG_ERROR(instance, " ------ %p Testing Log Error", instance);
- gLogI.log(kError_ANPLogType, " ------ %p Testing Log Error", instance);
- gLogI.log(kWarning_ANPLogType, " ------ %p Testing Log Warning", instance);
- gLogI.log(kDebug_ANPLogType, " ------ %p Testing Log Debug", instance);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// TIMER TESTS
-///////////////////////////////////////////////////////////////////////////////
-
-#define TIMER_INTERVAL 50
-static void timer_oneshot(NPP instance, uint32 timerID);
-static void timer_repeat(NPP instance, uint32 timerID);
-static void timer_neverfires(NPP instance, uint32 timerID);
-static void timer_latency(NPP instance, uint32 timerID);
-
-void BackgroundPlugin::test_timers() {
- NPP instance = this->inst();
-
- //Setup the testing counters
- mTimerRepeatCount = 5;
- mTimerLatencyCount = 5;
-
- // test for bogus timerID
- browser->unscheduletimer(instance, 999999);
- // test one-shot
- browser->scheduletimer(instance, 100, false, timer_oneshot);
- // test repeat
- browser->scheduletimer(instance, 50, true, timer_repeat);
- // test timer latency
- browser->scheduletimer(instance, TIMER_INTERVAL, true, timer_latency);
- mStartTime = mPrevTime = getMSecs();
- // test unschedule immediately
- uint32 id = browser->scheduletimer(instance, 100, false, timer_neverfires);
- browser->unscheduletimer(instance, id);
- // test double unschedule (should be no-op)
- browser->unscheduletimer(instance, id);
-
-}
-
-static void timer_oneshot(NPP instance, uint32 timerID) {
- gLogI.log(kDebug_ANPLogType, "-------- oneshot timer\n");
-}
-
-static void timer_repeat(NPP instance, uint32 timerID) {
- BackgroundPlugin *obj = ((BackgroundPlugin*) ((PluginObject*) instance->pdata)->activePlugin);
-
- gLogI.log(kDebug_ANPLogType, "-------- repeat timer %d\n",
- obj->mTimerRepeatCount);
- if (--obj->mTimerRepeatCount == 0) {
- browser->unscheduletimer(instance, timerID);
- }
-}
-
-static void timer_neverfires(NPP instance, uint32 timerID) {
- gLogI.log(kError_ANPLogType, "-------- timer_neverfires!!!\n");
-}
-
-static void timer_latency(NPP instance, uint32 timerID) {
- BackgroundPlugin *obj = ((BackgroundPlugin*) ((PluginObject*) instance->pdata)->activePlugin);
-
- obj->mTimerLatencyCurrentCount += 1;
-
- uint32_t now = getMSecs();
- uint32_t interval = now - obj->mPrevTime;
- uint32_t dur = now - obj->mStartTime;
- uint32_t expectedDur = obj->mTimerLatencyCurrentCount * TIMER_INTERVAL;
- int32_t drift = dur - expectedDur;
- int32_t avgDrift = drift / obj->mTimerLatencyCurrentCount;
-
- obj->mPrevTime = now;
-
- gLogI.log(kDebug_ANPLogType,
- "-------- latency test: [%3d] interval %d expected %d, total %d expected %d, drift %d avg %d\n",
- obj->mTimerLatencyCurrentCount, interval, TIMER_INTERVAL, dur,
- expectedDur, drift, avgDrift);
-
- if (--obj->mTimerLatencyCount == 0) {
- browser->unscheduletimer(instance, timerID);
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// BITMAP TESTS
-///////////////////////////////////////////////////////////////////////////////
-
-static void test_formats(NPP instance);
-
-void BackgroundPlugin::test_bitmaps() {
- test_formats(this->inst());
-}
-
-static void test_formats(NPP instance) {
-
- // TODO pull names from enum in npapi instead of hardcoding them
- static const struct {
- ANPBitmapFormat fFormat;
- const char* fName;
- } gRecs[] = {
- { kUnknown_ANPBitmapFormat, "unknown" },
- { kRGBA_8888_ANPBitmapFormat, "8888" },
- { kRGB_565_ANPBitmapFormat, "565" },
- };
-
- ANPPixelPacking packing;
- for (size_t i = 0; i < ARRAY_COUNT(gRecs); i++) {
- if (gBitmapI.getPixelPacking(gRecs[i].fFormat, &packing)) {
- gLogI.log(kDebug_ANPLogType,
- "pixel format [%d] %s has packing ARGB [%d %d] [%d %d] [%d %d] [%d %d]\n",
- gRecs[i].fFormat, gRecs[i].fName,
- packing.AShift, packing.ABits,
- packing.RShift, packing.RBits,
- packing.GShift, packing.GBits,
- packing.BShift, packing.BBits);
- } else {
- gLogI.log(kDebug_ANPLogType,
- "pixel format [%d] %s has no packing\n",
- gRecs[i].fFormat, gRecs[i].fName);
- }
- }
-}
-
-void BackgroundPlugin::test_bitmap_transparency(const ANPEvent* evt) {
- NPP instance = this->inst();
-
- // check default & set transparent
- if (!mFinishedStageOne) {
-
- gLogI.log(kDebug_ANPLogType, "BEGIN: testing bitmap transparency");
-
- //check to make sure it is not transparent
- if (evt->data.draw.data.bitmap.format == kRGBA_8888_ANPBitmapFormat) {
- gLogI.log(kError_ANPLogType, "bitmap default format is transparent");
- }
-
- //make it transparent (any non-null value will set it to true)
- bool value = true;
- NPError err = browser->setvalue(instance, NPPVpluginTransparentBool, &value);
- if (err != NPERR_NO_ERROR) {
- gLogI.log(kError_ANPLogType, "Error setting transparency.");
- }
-
- mFinishedStageOne = true;
- browser->invalidaterect(instance, NULL);
- }
- // check transparent & set opaque
- else if (!mFinishedStageTwo) {
-
- //check to make sure it is transparent
- if (evt->data.draw.data.bitmap.format != kRGBA_8888_ANPBitmapFormat) {
- gLogI.log(kError_ANPLogType, "bitmap did not change to transparent format");
- }
-
- //make it opaque
- NPError err = browser->setvalue(instance, NPPVpluginTransparentBool, NULL);
- if (err != NPERR_NO_ERROR) {
- gLogI.log(kError_ANPLogType, "Error setting transparency.");
- }
-
- mFinishedStageTwo = true;
- }
- // check opaque
- else if (!mFinishedStageThree) {
-
- //check to make sure it is not transparent
- if (evt->data.draw.data.bitmap.format == kRGBA_8888_ANPBitmapFormat) {
- gLogI.log(kError_ANPLogType, "bitmap default format is transparent");
- }
-
- gLogI.log(kDebug_ANPLogType, "END: testing bitmap transparency");
-
- mFinishedStageThree = true;
- }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// DOM TESTS
-///////////////////////////////////////////////////////////////////////////////
-
-void BackgroundPlugin::test_domAccess() {
- NPP instance = this->inst();
-
- gLogI.log(kDebug_ANPLogType, " ------ %p Testing DOM Access", instance);
-
- // Get the plugin's DOM object
- NPObject* windowObject = NULL;
- browser->getvalue(instance, NPNVWindowNPObject, &windowObject);
-
- if (!windowObject)
- gLogI.log(kError_ANPLogType, " ------ %p Unable to retrieve DOM Window", instance);
-
- // Retrieve a property from the plugin's DOM object
- NPIdentifier topIdentifier = browser->getstringidentifier("top");
- NPVariant topObjectVariant;
- browser->getproperty(instance, windowObject, topIdentifier, &topObjectVariant);
-
- if (topObjectVariant.type != NPVariantType_Object)
- gLogI.log(kError_ANPLogType, " ------ %p Invalid Variant type for DOM Property: %d,%d", instance, topObjectVariant.type, NPVariantType_Object);
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
-// JAVASCRIPT TESTS
-///////////////////////////////////////////////////////////////////////////////
-
-
-void BackgroundPlugin::test_javascript() {
- NPP instance = this->inst();
-
- gLogI.log(kDebug_ANPLogType, " ------ %p Testing JavaScript Access", instance);
-
- // Get the plugin's DOM object
- NPObject* windowObject = NULL;
- browser->getvalue(instance, NPNVWindowNPObject, &windowObject);
-
- if (!windowObject)
- gLogI.log(kError_ANPLogType, " ------ %p Unable to retrieve DOM Window", instance);
-
- // create a string (JS code) that is stored in memory allocated by the browser
- const char* jsString = "1200 + 34";
- void* stringMem = browser->memalloc(strlen(jsString));
- memcpy(stringMem, jsString, strlen(jsString));
-
- // execute the javascript in the plugin's DOM object
- NPString script = { (char*)stringMem, strlen(jsString) };
- NPVariant scriptVariant;
- if (!browser->evaluate(instance, windowObject, &script, &scriptVariant))
- gLogI.log(kError_ANPLogType, " ------ %p Unable to eval the JS.", instance);
-
- if (scriptVariant.type == NPVariantType_Int32) {
- if (scriptVariant.value.intValue != 1234)
- gLogI.log(kError_ANPLogType, " ------ %p Invalid Value for JS Return: %d,1234", instance, scriptVariant.value.intValue);
- } else {
- gLogI.log(kError_ANPLogType, " ------ %p Invalid Variant type for JS Return: %d,%d", instance, scriptVariant.type, NPVariantType_Int32);
- }
-
- // free the memory allocated within the browser
- browser->memfree(stringMem);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Load Java Classes Tests
-///////////////////////////////////////////////////////////////////////////////
-
-void BackgroundPlugin::test_loadJavaClass() {
-
- JNIEnv* env = NULL;
- if (gVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- gLogI.log(kError_ANPLogType, " ---- LoadJavaTest: failed to get env");
- return;
- }
-
- const char* className = "com.android.sampleplugin.BackgroundTest";
- jclass backgroundClass = gSystemI.loadJavaClass(inst(), className);
-
- if(!backgroundClass) {
- gLogI.log(kError_ANPLogType, " ---- LoadJavaTest: failed to load class");
- return;
- }
-
- jmethodID constructor = env->GetMethodID(backgroundClass, "<init>", "()V");
- jmethodID addMethod = env->GetMethodID(backgroundClass, "addInt", "(II)I");
- jobject backgroundObject = env->NewObject(backgroundClass, constructor);
-
- if(!backgroundObject) {
- gLogI.log(kError_ANPLogType, " ---- LoadJavaTest: failed to construct object");
- return;
- }
-
- jint result = env->CallIntMethod(backgroundObject, addMethod, 2, 2);
-
- if (result != 4) {
- gLogI.log(kError_ANPLogType, " ---- LoadJavaTest: invalid result (%d != 4)", result);
- }
-}
diff --git a/samples/BrowserPlugin/jni/background/BackgroundPlugin.h b/samples/BrowserPlugin/jni/background/BackgroundPlugin.h
deleted file mode 100644
index ebd77d1..0000000
--- a/samples/BrowserPlugin/jni/background/BackgroundPlugin.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "PluginObject.h"
-
-#ifndef backgroundPlugin__DEFINED
-#define backgroundPlugin__DEFINED
-
-class BackgroundPlugin : public SurfaceSubPlugin {
-public:
- BackgroundPlugin(NPP inst);
- virtual ~BackgroundPlugin();
- virtual int16 handleEvent(const ANPEvent* evt);
- virtual jobject getSurface();
-
- // Timer Testing Variables
- uint32_t mStartTime;
- uint32_t mPrevTime;
- int mTimerRepeatCount;
- int mTimerLatencyCount;
- int mTimerLatencyCurrentCount;
-
- // Bitmap Transparency Variables
- bool mFinishedStageOne; // check default & set transparent
- bool mFinishedStageTwo; // check transparent & set opaque
- bool mFinishedStageThree; // check opaque
-
-private:
- void drawPlugin(int surfaceWidth, int surfaceHeight);
- void destroySurface();
-
- jobject m_surface;
-
- void test_logging();
- void test_timers();
- void test_bitmaps();
- void test_bitmap_transparency(const ANPEvent* evt);
- void test_domAccess();
- void test_javascript();
- void test_loadJavaClass();
-
-};
-
-#endif // backgroundPlugin__DEFINED
diff --git a/samples/BrowserPlugin/jni/form/FormPlugin.cpp b/samples/BrowserPlugin/jni/form/FormPlugin.cpp
deleted file mode 100644
index 5a536d9..0000000
--- a/samples/BrowserPlugin/jni/form/FormPlugin.cpp
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "FormPlugin.h"
-
-#include <stdio.h>
-#include <sys/time.h>
-#include <time.h>
-#include <math.h>
-#include <string.h>
-
-extern NPNetscapeFuncs* browser;
-extern ANPLogInterfaceV0 gLogI;
-extern ANPCanvasInterfaceV0 gCanvasI;
-extern ANPPaintInterfaceV0 gPaintI;
-extern ANPTypefaceInterfaceV0 gTypefaceI;
-extern ANPWindowInterfaceV0 gWindowI;
-
-
-static void inval(NPP instance) {
- browser->invalidaterect(instance, NULL);
-}
-
-static uint16 rnd16(float x, int inset) {
- int ix = (int)roundf(x) + inset;
- if (ix < 0) {
- ix = 0;
- }
- return static_cast<uint16>(ix);
-}
-
-static void inval(NPP instance, const ANPRectF& r, bool doAA) {
- const int inset = doAA ? -1 : 0;
-
- PluginObject *obj = reinterpret_cast<PluginObject*>(instance->pdata);
- NPRect inval;
- inval.left = rnd16(r.left, inset);
- inval.top = rnd16(r.top, inset);
- inval.right = rnd16(r.right, -inset);
- inval.bottom = rnd16(r.bottom, -inset);
- browser->invalidaterect(instance, &inval);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-FormPlugin::FormPlugin(NPP inst) : SubPlugin(inst) {
-
- m_hasFocus = false;
- m_activeInput = NULL;
-
- memset(&m_usernameInput, 0, sizeof(m_usernameInput));
- memset(&m_passwordInput, 0, sizeof(m_passwordInput));
-
- m_usernameInput.text[0] = '\0';
- m_usernameInput.charPtr = 0;
-
- m_passwordInput.text[0] = '\0';
- m_passwordInput.charPtr = 0;
-
- m_paintInput = gPaintI.newPaint();
- gPaintI.setFlags(m_paintInput, gPaintI.getFlags(m_paintInput) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paintInput, 0xFFFFFFFF);
-
- m_paintActive = gPaintI.newPaint();
- gPaintI.setFlags(m_paintActive, gPaintI.getFlags(m_paintActive) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paintActive, 0xFFFFFF00);
-
- m_paintText = gPaintI.newPaint();
- gPaintI.setFlags(m_paintText, gPaintI.getFlags(m_paintText) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paintText, 0xFF000000);
- gPaintI.setTextSize(m_paintText, 18);
-
- ANPTypeface* tf = gTypefaceI.createFromName("serif", kItalic_ANPTypefaceStyle);
- gPaintI.setTypeface(m_paintText, tf);
- gTypefaceI.unref(tf);
-
- //register for key and visibleRect events
- ANPEventFlags flags = kKey_ANPEventFlag;
- NPError err = browser->setvalue(inst, kAcceptEvents_ANPSetValue, &flags);
- if (err != NPERR_NO_ERROR) {
- gLogI.log(kError_ANPLogType, "Error selecting input events.");
- }
-}
-
-FormPlugin::~FormPlugin() {
- gPaintI.deletePaint(m_paintInput);
- gPaintI.deletePaint(m_paintActive);
- gPaintI.deletePaint(m_paintText);
-}
-
-bool FormPlugin::supportsDrawingModel(ANPDrawingModel model) {
- return (model == kBitmap_ANPDrawingModel);
-}
-
-void FormPlugin::drawPlugin(const ANPBitmap& bitmap, const ANPRectI& clip) {
- ANPCanvas* canvas = gCanvasI.newCanvas(&bitmap);
-
- ANPRectF clipR;
- clipR.left = clip.left;
- clipR.top = clip.top;
- clipR.right = clip.right;
- clipR.bottom = clip.bottom;
- gCanvasI.clipRect(canvas, &clipR);
-
- draw(canvas);
- gCanvasI.deleteCanvas(canvas);
-}
-
-void FormPlugin::draw(ANPCanvas* canvas) {
- NPP instance = this->inst();
- PluginObject *obj = (PluginObject*) instance->pdata;
-
- const float inputWidth = 60;
- const float inputHeight = 30;
- const int W = obj->window->width;
- const int H = obj->window->height;
-
- // color the plugin canvas
- gCanvasI.drawColor(canvas, (m_hasFocus) ? 0xFFCDCDCD : 0xFF545454);
-
- // draw the username box (5 px from the top edge)
- m_usernameInput.rect.left = 5;
- m_usernameInput.rect.top = 5;
- m_usernameInput.rect.right = W - 5;
- m_usernameInput.rect.bottom = m_usernameInput.rect.top + inputHeight;
- gCanvasI.drawRect(canvas, &m_usernameInput.rect, getPaint(&m_usernameInput));
- drawText(canvas, m_usernameInput);
-
- // draw the password box (5 px from the bottom edge)
- m_passwordInput.rect.left = 5;
- m_passwordInput.rect.top = H - (inputHeight + 5);
- m_passwordInput.rect.right = W - 5;
- m_passwordInput.rect.bottom = m_passwordInput.rect.top + inputHeight;
- gCanvasI.drawRect(canvas, &m_passwordInput.rect, getPaint(&m_passwordInput));
- drawPassword(canvas, m_passwordInput);
-
- //invalidate the canvas
- //inval(instance);
-}
-
-ANPPaint* FormPlugin::getPaint(TextInput* input) {
- return (input == m_activeInput) ? m_paintActive : m_paintInput;
-}
-
-void FormPlugin::drawText(ANPCanvas* canvas, TextInput textInput) {
-
- // get font metrics
- ANPFontMetrics fontMetrics;
- gPaintI.getFontMetrics(m_paintText, &fontMetrics);
-
- gCanvasI.drawText(canvas, textInput.text, textInput.charPtr,
- textInput.rect.left + 5,
- textInput.rect.bottom - fontMetrics.fBottom, m_paintText);
-}
-
-void FormPlugin::drawPassword(ANPCanvas* canvas, TextInput passwordInput) {
-
- // get font metrics
- ANPFontMetrics fontMetrics;
- gPaintI.getFontMetrics(m_paintText, &fontMetrics);
-
- // comput the circle dimensions and initial location
- float initialX = passwordInput.rect.left + 5;
- float ovalBottom = passwordInput.rect.bottom - 2;
- float ovalTop = ovalBottom - (fontMetrics.fBottom - fontMetrics.fTop);
- float ovalWidth = ovalBottom - ovalTop;
- float ovalSpacing = 3;
-
- // draw circles instead of the actual text
- for (uint32_t x = 0; x < passwordInput.charPtr; x++) {
- ANPRectF oval;
- oval.left = initialX + ((ovalWidth + ovalSpacing) * (float) x);
- oval.right = oval.left + ovalWidth;
- oval.top = ovalTop;
- oval.bottom = ovalBottom;
- gCanvasI.drawOval(canvas, &oval, m_paintText);
- }
-}
-
-int16 FormPlugin::handleEvent(const ANPEvent* evt) {
- NPP instance = this->inst();
-
- switch (evt->eventType) {
- case kDraw_ANPEventType:
- switch (evt->data.draw.model) {
- case kBitmap_ANPDrawingModel:
- drawPlugin(evt->data.draw.data.bitmap, evt->data.draw.clip);
- return 1;
- default:
- break; // unknown drawing model
- }
- break;
-
- case kLifecycle_ANPEventType:
- if (evt->data.lifecycle.action == kLoseFocus_ANPLifecycleAction) {
- gLogI.log(kDebug_ANPLogType, "----%p Loosing Focus", instance);
-
- if (m_activeInput) {
- // hide the keyboard
- gWindowI.showKeyboard(instance, false);
-
- //reset the activeInput
- m_activeInput = NULL;
- }
-
- m_hasFocus = false;
- inval(instance);
- return 1;
- }
- else if (evt->data.lifecycle.action == kGainFocus_ANPLifecycleAction) {
- gLogI.log(kDebug_ANPLogType, "----%p Gaining Focus", instance);
- m_hasFocus = true;
- inval(instance);
- return 1;
- }
- break;
-
- case kMouse_ANPEventType: {
-
- int x = evt->data.mouse.x;
- int y = evt->data.mouse.y;
- if (kDown_ANPMouseAction == evt->data.mouse.action) {
-
- TextInput* currentInput = validTap(x,y);
-
- if (currentInput)
- gWindowI.showKeyboard(instance, true);
- else if (m_activeInput)
- gWindowI.showKeyboard(instance, false);
-
- if (currentInput != m_activeInput)
- switchActiveInput(currentInput);
-
- return 1;
- }
- break;
- }
-
- case kKey_ANPEventType:
- if (evt->data.key.action == kDown_ANPKeyAction) {
-
- //handle navigation keys
- if (evt->data.key.nativeCode >= kDpadUp_ANPKeyCode
- && evt->data.key.nativeCode <= kDpadCenter_ANPKeyCode) {
- return handleNavigation(evt->data.key.nativeCode) ? 1 : 0;
- }
-
- if (m_activeInput) {
- handleTextInput(m_activeInput, evt->data.key.nativeCode,
- evt->data.key.unichar);
- inval(instance, m_activeInput->rect, true);
- }
- }
- return 1;
-
- default:
- break;
- }
- return 0; // unknown or unhandled event
-}
-
-void FormPlugin::switchActiveInput(TextInput* newInput) {
- NPP instance = this->inst();
-
- if (m_activeInput) {
- inval(instance, m_activeInput->rect, true); // inval the old
- gWindowI.clearVisibleRects(instance);
- }
-
- m_activeInput = newInput; // set the new active input
-
- if (m_activeInput) {
- inval(instance, m_activeInput->rect, true); // inval the new
- scrollIntoView(m_activeInput);
- }
-}
-
-bool FormPlugin::handleNavigation(ANPKeyCode keyCode) {
- NPP instance = this->inst();
-
- gLogI.log(kDebug_ANPLogType, "----%p Recvd Nav Key %d", instance, keyCode);
-
- if (!m_activeInput) {
- gWindowI.showKeyboard(instance, true);
- switchActiveInput(&m_usernameInput);
- }
- else if (m_activeInput == &m_usernameInput) {
- if (keyCode == kDpadDown_ANPKeyCode) {
- switchActiveInput(&m_passwordInput);
- }
- else if (keyCode == kDpadCenter_ANPKeyCode)
- gWindowI.showKeyboard(instance, false);
- else if (keyCode == kDpadUp_ANPKeyCode)
- return false;
- }
- else if (m_activeInput == &m_passwordInput) {
- if (keyCode == kDpadUp_ANPKeyCode) {
- switchActiveInput(&m_usernameInput);
- }
- else if (keyCode == kDpadCenter_ANPKeyCode)
- gWindowI.showKeyboard(instance, false);
- else if (keyCode == kDpadDown_ANPKeyCode)
- return false;
- }
-
- return true;
-}
-
-void FormPlugin::handleTextInput(TextInput* input, ANPKeyCode keyCode, int32_t unichar) {
- NPP instance = this->inst();
-
- //make sure the input field is in view
- scrollIntoView(input);
-
- //handle the delete operation
- if (keyCode == kDel_ANPKeyCode) {
- if (input->charPtr > 0) {
- input->charPtr--;
- }
- return;
- }
-
- //check to see that the input is not full
- if (input->charPtr >= (sizeof(input->text) - 1))
- return;
-
- //add the character
- input->text[input->charPtr] = static_cast<char>(unichar);
- input->charPtr++;
-
- gLogI.log(kDebug_ANPLogType, "----%p Text: %c", instance, unichar);
-}
-
-void FormPlugin::scrollIntoView(TextInput* input) {
- NPP instance = this->inst();
- PluginObject *obj = (PluginObject*) instance->pdata;
- NPWindow *window = obj->window;
-
- // find the textInput's global rect coordinates
- ANPRectI visibleRects[1];
- visibleRects[0].left = input->rect.left;
- visibleRects[0].top = input->rect.top;
- visibleRects[0].right = input->rect.right;
- visibleRects[0].bottom = input->rect.bottom;
-
- gWindowI.setVisibleRects(instance, visibleRects, 1);
-}
-
-TextInput* FormPlugin::validTap(int x, int y) {
-
- if (x > m_usernameInput.rect.left && x < m_usernameInput.rect.right &&
- y > m_usernameInput.rect.top && y < m_usernameInput.rect.bottom)
- return &m_usernameInput;
- else if (x >m_passwordInput.rect.left && x < m_passwordInput.rect.right &&
- y > m_passwordInput.rect.top && y < m_passwordInput.rect.bottom)
- return &m_passwordInput;
- else
- return NULL;
-}
diff --git a/samples/BrowserPlugin/jni/form/FormPlugin.h b/samples/BrowserPlugin/jni/form/FormPlugin.h
deleted file mode 100644
index 041ffb8..0000000
--- a/samples/BrowserPlugin/jni/form/FormPlugin.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "PluginObject.h"
-
-#ifndef formPlugin__DEFINED
-#define formPlugin__DEFINED
-
-struct TextInput {
- ANPRectF rect;
- char text[30];
- uint32_t charPtr;
-};
-
-class FormPlugin : public SubPlugin {
-public:
- FormPlugin(NPP inst);
- virtual ~FormPlugin();
- virtual bool supportsDrawingModel(ANPDrawingModel);
- virtual int16 handleEvent(const ANPEvent* evt);
-private:
- void draw(ANPCanvas*);
- void drawPlugin(const ANPBitmap& bitmap, const ANPRectI& clip);
-
- bool m_hasFocus;
-
- TextInput* m_activeInput;
- TextInput m_usernameInput;
- TextInput m_passwordInput;
-
- ANPPaint* m_paintInput;
- ANPPaint* m_paintActive;
- ANPPaint* m_paintText;
-
- ANPRectI m_visibleRect;
-
- void drawText(ANPCanvas*, TextInput);
- void drawPassword(ANPCanvas*, TextInput);
-
- bool handleNavigation(ANPKeyCode keyCode);
- void handleTextInput(TextInput* input, ANPKeyCode keyCode, int32_t unichar);
- void scrollIntoView(TextInput* input);
- void switchActiveInput(TextInput* input);
-
- ANPPaint* getPaint(TextInput*);
- TextInput* validTap(int x, int y);
-
-};
-
-#endif // formPlugin__DEFINED
diff --git a/samples/BrowserPlugin/jni/jni-bridge.cpp b/samples/BrowserPlugin/jni/jni-bridge.cpp
deleted file mode 100644
index 9ba8a32..0000000
--- a/samples/BrowserPlugin/jni/jni-bridge.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- *
- */
-#include <string.h>
-#include <jni.h>
-#include <JNIHelp.h>
-#include <utils/Log.h>
-
-#include "PluginObject.h"
-
-#define EXPORT __attribute__((visibility("default")))
-
-extern ANPEventInterfaceV0 gEventI;
-
-static void surfaceCreated(JNIEnv* env, jobject thiz, jint npp, jobject surface) {
-
- // send custom event
- ANPEvent event;
- event.inSize = sizeof(ANPEvent);
- event.eventType = kCustom_ANPEventType;
- event.data.other[0] = kSurfaceCreated_CustomEvent;
-
- gEventI.postEvent((NPP)npp, &event);
-}
-
-static void surfaceChanged(JNIEnv* env, jobject thiz, jint npp, jint format, jint width, jint height) {
- // send custom event
- ANPEvent event;
- event.inSize = sizeof(ANPEvent);
- event.eventType = kCustom_ANPEventType;
- event.data.other[0] = kSurfaceChanged_CustomEvent;
- event.data.other[1] = width;
- event.data.other[2] = height;
-
- gEventI.postEvent((NPP)npp, &event);
-}
-
-static void surfaceDestroyed(JNIEnv* env, jobject thiz, jint npp) {
- // send custom event
- ANPEvent event;
- event.inSize = sizeof(ANPEvent);
- event.eventType = kCustom_ANPEventType;
- event.data.other[0] = kSurfaceDestroyed_CustomEvent;
-
- gEventI.postEvent((NPP)npp, &event);
-}
-
-/*
- * JNI registration.
- */
-static JNINativeMethod gPaintSurfaceMethods[] = {
- { "nativeSurfaceCreated", "(I)V", (void*) surfaceCreated },
- { "nativeSurfaceChanged", "(IIII)V", (void*) surfaceChanged },
- { "nativeSurfaceDestroyed", "(I)V", (void*) surfaceDestroyed },
-};
-
-EXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
-
- JNIEnv* env = NULL;
-
- if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- return -1;
- }
-
- jniRegisterNativeMethods(env, "com/android/sampleplugin/PaintSurface",
- gPaintSurfaceMethods, NELEM(gPaintSurfaceMethods));
-
- return JNI_VERSION_1_4;
-}
diff --git a/samples/BrowserPlugin/jni/main.cpp b/samples/BrowserPlugin/jni/main.cpp
deleted file mode 100644
index 3e8fee7..0000000
--- a/samples/BrowserPlugin/jni/main.cpp
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include "main.h"
-#include "PluginObject.h"
-#include "AnimationPlugin.h"
-#include "AudioPlugin.h"
-#include "BackgroundPlugin.h"
-#include "FormPlugin.h"
-#include "NavigationPlugin.h"
-#include "PaintPlugin.h"
-#include "VideoPlugin.h"
-
-NPNetscapeFuncs* browser;
-JavaVM* gVM;
-
-#define EXPORT __attribute__((visibility("default")))
-
-NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc,
- char* argn[], char* argv[], NPSavedData* saved);
-NPError NPP_Destroy(NPP instance, NPSavedData** save);
-NPError NPP_SetWindow(NPP instance, NPWindow* window);
-NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream,
- NPBool seekable, uint16* stype);
-NPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason);
-int32 NPP_WriteReady(NPP instance, NPStream* stream);
-int32 NPP_Write(NPP instance, NPStream* stream, int32 offset, int32 len,
- void* buffer);
-void NPP_StreamAsFile(NPP instance, NPStream* stream, const char* fname);
-void NPP_Print(NPP instance, NPPrint* platformPrint);
-int16 NPP_HandleEvent(NPP instance, void* event);
-void NPP_URLNotify(NPP instance, const char* URL, NPReason reason,
- void* notifyData);
-NPError NPP_GetValue(NPP instance, NPPVariable variable, void *value);
-NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value);
-
-extern "C" {
-EXPORT NPError NP_Initialize(NPNetscapeFuncs* browserFuncs, NPPluginFuncs* pluginFuncs, void *java_env);
-EXPORT NPError NP_GetValue(NPP instance, NPPVariable variable, void *value);
-EXPORT const char* NP_GetMIMEDescription(void);
-EXPORT void NP_Shutdown(void);
-};
-
-ANPAudioTrackInterfaceV0 gSoundI;
-ANPBitmapInterfaceV0 gBitmapI;
-ANPCanvasInterfaceV0 gCanvasI;
-ANPEventInterfaceV0 gEventI;
-ANPLogInterfaceV0 gLogI;
-ANPPaintInterfaceV0 gPaintI;
-ANPPathInterfaceV0 gPathI;
-ANPSurfaceInterfaceV0 gSurfaceI;
-ANPSystemInterfaceV0 gSystemI;
-ANPTypefaceInterfaceV0 gTypefaceI;
-ANPWindowInterfaceV0 gWindowI;
-
-#define ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0]))
-#define DEBUG_PLUGIN_EVENTS 0
-
-NPError NP_Initialize(NPNetscapeFuncs* browserFuncs, NPPluginFuncs* pluginFuncs, void *java_env)
-{
- // Make sure we have a function table equal or larger than we are built against.
- if (browserFuncs->size < sizeof(NPNetscapeFuncs)) {
- return NPERR_GENERIC_ERROR;
- }
-
- // Copy the function table (structure)
- browser = (NPNetscapeFuncs*) malloc(sizeof(NPNetscapeFuncs));
- memcpy(browser, browserFuncs, sizeof(NPNetscapeFuncs));
-
- // Build the plugin function table
- pluginFuncs->version = 11;
- pluginFuncs->size = sizeof(pluginFuncs);
- pluginFuncs->newp = NPP_New;
- pluginFuncs->destroy = NPP_Destroy;
- pluginFuncs->setwindow = NPP_SetWindow;
- pluginFuncs->newstream = NPP_NewStream;
- pluginFuncs->destroystream = NPP_DestroyStream;
- pluginFuncs->asfile = NPP_StreamAsFile;
- pluginFuncs->writeready = NPP_WriteReady;
- pluginFuncs->write = (NPP_WriteProcPtr)NPP_Write;
- pluginFuncs->print = NPP_Print;
- pluginFuncs->event = NPP_HandleEvent;
- pluginFuncs->urlnotify = NPP_URLNotify;
- pluginFuncs->getvalue = NPP_GetValue;
- pluginFuncs->setvalue = NPP_SetValue;
-
- static const struct {
- NPNVariable v;
- uint32_t size;
- ANPInterface* i;
- } gPairs[] = {
- { kAudioTrackInterfaceV0_ANPGetValue, sizeof(gSoundI), &gSoundI },
- { kBitmapInterfaceV0_ANPGetValue, sizeof(gBitmapI), &gBitmapI },
- { kCanvasInterfaceV0_ANPGetValue, sizeof(gCanvasI), &gCanvasI },
- { kEventInterfaceV0_ANPGetValue, sizeof(gEventI), &gEventI },
- { kLogInterfaceV0_ANPGetValue, sizeof(gLogI), &gLogI },
- { kPaintInterfaceV0_ANPGetValue, sizeof(gPaintI), &gPaintI },
- { kPathInterfaceV0_ANPGetValue, sizeof(gPathI), &gPathI },
- { kSurfaceInterfaceV0_ANPGetValue, sizeof(gSurfaceI), &gSurfaceI },
- { kSystemInterfaceV0_ANPGetValue, sizeof(gSystemI), &gSystemI },
- { kTypefaceInterfaceV0_ANPGetValue, sizeof(gTypefaceI), &gTypefaceI },
- { kWindowInterfaceV0_ANPGetValue, sizeof(gWindowI), &gWindowI },
- };
- for (size_t i = 0; i < ARRAY_COUNT(gPairs); i++) {
- gPairs[i].i->inSize = gPairs[i].size;
- NPError err = browser->getvalue(NULL, gPairs[i].v, gPairs[i].i);
- if (err) {
- return err;
- }
- }
-
- // store the JavaVM for the plugin
- JNIEnv* env = (JNIEnv*)java_env;
- env->GetJavaVM(&gVM);
-
- return NPERR_NO_ERROR;
-}
-
-void NP_Shutdown(void)
-{
-
-}
-
-const char *NP_GetMIMEDescription(void)
-{
- return "application/x-testbrowserplugin:tst:Test plugin mimetype is application/x-testbrowserplugin";
-}
-
-NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc,
- char* argn[], char* argv[], NPSavedData* saved)
-{
-
- /* BEGIN: STANDARD PLUGIN FRAMEWORK */
- PluginObject *obj = NULL;
-
- // Scripting functions appeared in NPAPI version 14
- if (browser->version >= 14) {
- instance->pdata = browser->createobject (instance, getPluginClass());
- obj = static_cast<PluginObject*>(instance->pdata);
- }
- /* END: STANDARD PLUGIN FRAMEWORK */
-
- // select the drawing model based on user input
- ANPDrawingModel model = kBitmap_ANPDrawingModel;
-
- for (int i = 0; i < argc; i++) {
- if (!strcmp(argn[i], "DrawingModel")) {
- if (!strcmp(argv[i], "Bitmap")) {
- model = kBitmap_ANPDrawingModel;
- }
- else if (!strcmp(argv[i], "Surface")) {
- model = kSurface_ANPDrawingModel;
- }
- gLogI.log(kDebug_ANPLogType, "------ %p DrawingModel is %d", instance, model);
- break;
- }
- }
-
- // notify the plugin API of the drawing model we wish to use. This must be
- // done prior to creating certain subPlugin objects (e.g. surfaceViews)
- NPError err = browser->setvalue(instance, kRequestDrawingModel_ANPSetValue,
- reinterpret_cast<void*>(model));
- if (err) {
- gLogI.log(kError_ANPLogType, "request model %d err %d", model, err);
- return err;
- }
-
- const char* path = gSystemI.getApplicationDataDirectory();
- if (path) {
- gLogI.log(kDebug_ANPLogType, "Application data dir is %s", path);
- } else {
- gLogI.log(kError_ANPLogType, "Can't find Application data dir");
- }
-
- // select the pluginType
- for (int i = 0; i < argc; i++) {
- if (!strcmp(argn[i], "PluginType")) {
- if (!strcmp(argv[i], "Animation")) {
- obj->pluginType = kAnimation_PluginType;
- obj->activePlugin = new BallAnimation(instance);
- }
- else if (!strcmp(argv[i], "Audio")) {
- obj->pluginType = kAudio_PluginType;
- obj->activePlugin = new AudioPlugin(instance);
- }
- else if (!strcmp(argv[i], "Background")) {
- obj->pluginType = kBackground_PluginType;
- obj->activePlugin = new BackgroundPlugin(instance);
- }
- else if (!strcmp(argv[i], "Form")) {
- obj->pluginType = kForm_PluginType;
- obj->activePlugin = new FormPlugin(instance);
- }
- else if (!strcmp(argv[i], "Navigation")) {
- obj->pluginType = kNavigation_PluginType;
- obj->activePlugin = new NavigationPlugin(instance);
- }
- else if (!strcmp(argv[i], "Paint")) {
- obj->pluginType = kPaint_PluginType;
- obj->activePlugin = new PaintPlugin(instance);
- }
- else if (!strcmp(argv[i], "Video")) {
- obj->pluginType = kVideo_PluginType;
- obj->activePlugin = new VideoPlugin(instance);
- }
- gLogI.log(kDebug_ANPLogType, "------ %p PluginType is %d", instance, obj->pluginType);
- break;
- }
- }
-
- // if no pluginType is specified then default to Animation
- if (!obj->pluginType) {
- gLogI.log(kError_ANPLogType, "------ %p No PluginType attribute was found", instance);
- obj->pluginType = kAnimation_PluginType;
- obj->activePlugin = new BallAnimation(instance);
- }
-
- // check to ensure the pluginType supports the model
- if (!obj->activePlugin->supportsDrawingModel(model)) {
- gLogI.log(kError_ANPLogType, "------ %p Unsupported DrawingModel (%d)", instance, model);
- return NPERR_GENERIC_ERROR;
- }
-
- // if the plugin uses the surface drawing model then set the java context
- if (model == kSurface_ANPDrawingModel) {
- SurfaceSubPlugin* surfacePlugin = static_cast<SurfaceSubPlugin*>(obj->activePlugin);
-
- jobject context;
- NPError err = browser->getvalue(instance, kJavaContext_ANPGetValue,
- static_cast<void*>(&context));
- if (err) {
- gLogI.log(kError_ANPLogType, "request context err: %d", err);
- return err;
- }
-
- surfacePlugin->setContext(context);
- }
-
-
- return NPERR_NO_ERROR;
-}
-
-NPError NPP_Destroy(NPP instance, NPSavedData** save)
-{
- PluginObject *obj = (PluginObject*) instance->pdata;
- if (obj) {
- delete obj->activePlugin;
- browser->releaseobject(&obj->header);
- }
-
- return NPERR_NO_ERROR;
-}
-
-NPError NPP_SetWindow(NPP instance, NPWindow* window)
-{
- PluginObject *obj = (PluginObject*) instance->pdata;
-
- // Do nothing if browser didn't support NPN_CreateObject which would have created the PluginObject.
- if (obj != NULL) {
- obj->window = window;
- }
-
- browser->invalidaterect(instance, NULL);
-
- return NPERR_NO_ERROR;
-}
-
-NPError NPP_NewStream(NPP instance, NPMIMEType type, NPStream* stream, NPBool seekable, uint16* stype)
-{
- *stype = NP_ASFILEONLY;
- return NPERR_NO_ERROR;
-}
-
-NPError NPP_DestroyStream(NPP instance, NPStream* stream, NPReason reason)
-{
- return NPERR_NO_ERROR;
-}
-
-int32 NPP_WriteReady(NPP instance, NPStream* stream)
-{
- return 0;
-}
-
-int32 NPP_Write(NPP instance, NPStream* stream, int32 offset, int32 len, void* buffer)
-{
- return 0;
-}
-
-void NPP_StreamAsFile(NPP instance, NPStream* stream, const char* fname)
-{
-}
-
-void NPP_Print(NPP instance, NPPrint* platformPrint)
-{
-}
-
-int16 NPP_HandleEvent(NPP instance, void* event)
-{
- PluginObject *obj = reinterpret_cast<PluginObject*>(instance->pdata);
- const ANPEvent* evt = reinterpret_cast<const ANPEvent*>(event);
-
-#if DEBUG_PLUGIN_EVENTS
- switch (evt->eventType) {
- case kDraw_ANPEventType:
-
- if (evt->data.draw.model == kBitmap_ANPDrawingModel) {
-
- static ANPBitmapFormat currentFormat = -1;
- if (evt->data.draw.data.bitmap.format != currentFormat) {
- currentFormat = evt->data.draw.data.bitmap.format;
- gLogI.log(kDebug_ANPLogType, "---- %p Draw (bitmap)"
- " clip=%d,%d,%d,%d format=%d", instance,
- evt->data.draw.clip.left,
- evt->data.draw.clip.top,
- evt->data.draw.clip.right,
- evt->data.draw.clip.bottom,
- evt->data.draw.data.bitmap.format);
- }
- }
- break;
-
- case kKey_ANPEventType:
- gLogI.log(kDebug_ANPLogType, "---- %p Key action=%d"
- " code=%d vcode=%d unichar=%d repeat=%d mods=%x", instance,
- evt->data.key.action,
- evt->data.key.nativeCode,
- evt->data.key.virtualCode,
- evt->data.key.unichar,
- evt->data.key.repeatCount,
- evt->data.key.modifiers);
- break;
-
- case kLifecycle_ANPEventType:
- gLogI.log(kDebug_ANPLogType, "---- %p Lifecycle action=%d",
- instance, evt->data.lifecycle.action);
- break;
-
- case kTouch_ANPEventType:
- gLogI.log(kDebug_ANPLogType, "---- %p Touch action=%d [%d %d]",
- instance, evt->data.touch.action, evt->data.touch.x,
- evt->data.touch.y);
- break;
-
- case kMouse_ANPEventType:
- gLogI.log(kDebug_ANPLogType, "---- %p Mouse action=%d [%d %d]",
- instance, evt->data.mouse.action, evt->data.mouse.x,
- evt->data.mouse.y);
- break;
-
- case kVisibleRect_ANPEventType:
- gLogI.log(kDebug_ANPLogType, "---- %p VisibleRect [%d %d %d %d]",
- instance, evt->data.visibleRect.rect.left, evt->data.visibleRect.rect.top,
- evt->data.visibleRect.rect.right, evt->data.visibleRect.rect.bottom);
- break;
-
- default:
- gLogI.log(kError_ANPLogType, "---- %p Unknown Event [%d]",
- instance, evt->eventType);
- break;
- }
-#endif
-
- if(!obj->activePlugin) {
- gLogI.log(kError_ANPLogType, "the active plugin is null.");
- return 0; // unknown or unhandled event
- }
- else {
- return obj->activePlugin->handleEvent(evt);
- }
-}
-
-void NPP_URLNotify(NPP instance, const char* url, NPReason reason, void* notifyData)
-{
-
-}
-
-EXPORT NPError NP_GetValue(NPP instance, NPPVariable variable, void *value) {
-
- if (variable == NPPVpluginNameString) {
- const char **str = (const char **)value;
- *str = "Test Plugin";
- return NPERR_NO_ERROR;
- }
-
- if (variable == NPPVpluginDescriptionString) {
- const char **str = (const char **)value;
- *str = "Description of Test Plugin";
- return NPERR_NO_ERROR;
- }
-
- return NPERR_GENERIC_ERROR;
-}
-
-NPError NPP_GetValue(NPP instance, NPPVariable variable, void* value)
-{
- if (variable == NPPVpluginScriptableNPObject) {
- void **v = (void **)value;
- PluginObject *obj = (PluginObject*) instance->pdata;
-
- if (obj)
- browser->retainobject(&obj->header);
-
- *v = &(obj->header);
- return NPERR_NO_ERROR;
- }
-
- if (variable == kJavaSurface_ANPGetValue) {
- //get the surface sub-plugin
- PluginObject* obj = static_cast<PluginObject*>(instance->pdata);
- if (obj && obj->activePlugin) {
-
- if(obj->activePlugin->supportsDrawingModel(kSurface_ANPDrawingModel)) {
- SurfaceSubPlugin* plugin = static_cast<SurfaceSubPlugin*>(obj->activePlugin);
- jobject* surface = static_cast<jobject*>(value);
- *surface = plugin->getSurface();
- return NPERR_NO_ERROR;
- } else {
- gLogI.log(kError_ANPLogType,
- "-- %p Tried to retrieve surface for non-surface plugin",
- instance);
- }
- }
- }
-
- return NPERR_GENERIC_ERROR;
-}
-
-NPError NPP_SetValue(NPP instance, NPNVariable variable, void *value)
-{
- return NPERR_GENERIC_ERROR;
-}
-
diff --git a/samples/BrowserPlugin/jni/main.h b/samples/BrowserPlugin/jni/main.h
deleted file mode 100644
index 66629e6..0000000
--- a/samples/BrowserPlugin/jni/main.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2008, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <npapi.h>
-#include <npfunctions.h>
-#include <npruntime.h>
-#include "android_npapi.h"
-#include "ANPSurface_npapi.h"
-#include "ANPSystem_npapi.h"
-
-extern NPNetscapeFuncs* browser;
-extern JavaVM* gVM;
diff --git a/samples/BrowserPlugin/jni/navigation/NavigationPlugin.cpp b/samples/BrowserPlugin/jni/navigation/NavigationPlugin.cpp
deleted file mode 100644
index 99667a4..0000000
--- a/samples/BrowserPlugin/jni/navigation/NavigationPlugin.cpp
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "NavigationPlugin.h"
-
-#include <stdio.h>
-#include <sys/time.h>
-#include <time.h>
-#include <math.h>
-#include <string.h>
-
-extern NPNetscapeFuncs* browser;
-extern ANPLogInterfaceV0 gLogI;
-extern ANPCanvasInterfaceV0 gCanvasI;
-extern ANPPaintInterfaceV0 gPaintI;
-extern ANPTypefaceInterfaceV0 gTypefaceI;
-extern ANPWindowInterfaceV0 gWindowI;
-
-
-static void inval(NPP instance) {
- browser->invalidaterect(instance, NULL);
-}
-
-static uint16 rnd16(float x, int inset) {
- int ix = (int)roundf(x) + inset;
- if (ix < 0) {
- ix = 0;
- }
- return static_cast<uint16>(ix);
-}
-
-static void inval(NPP instance, const ANPRectF& r, bool doAA) {
- const int inset = doAA ? -1 : 0;
-
- PluginObject *obj = reinterpret_cast<PluginObject*>(instance->pdata);
- NPRect inval;
- inval.left = rnd16(r.left, inset);
- inval.top = rnd16(r.top, inset);
- inval.right = rnd16(r.right, -inset);
- inval.bottom = rnd16(r.bottom, -inset);
- browser->invalidaterect(instance, &inval);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-NavigationPlugin::NavigationPlugin(NPP inst) : SubPlugin(inst) {
-
- m_hasFocus = false;
- m_activeNav = NULL;
-
- m_paintDisabled = gPaintI.newPaint();
- gPaintI.setFlags(m_paintDisabled, gPaintI.getFlags(m_paintDisabled) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paintDisabled, 0xFFFFFFFF);
-
- m_paintActive = gPaintI.newPaint();
- gPaintI.setFlags(m_paintActive, gPaintI.getFlags(m_paintActive) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paintActive, 0xFFFFFF00);
-
- //register for key events
- ANPEventFlags flags = kKey_ANPEventFlag;
- NPError err = browser->setvalue(inst, kAcceptEvents_ANPSetValue, &flags);
- if (err != NPERR_NO_ERROR) {
- gLogI.log(kError_ANPLogType, "Error selecting input events.");
- }
-}
-
-NavigationPlugin::~NavigationPlugin() {
- gPaintI.deletePaint(m_paintDisabled);
- gPaintI.deletePaint(m_paintActive);
-}
-
-bool NavigationPlugin::supportsDrawingModel(ANPDrawingModel model) {
- return (model == kBitmap_ANPDrawingModel);
-}
-
-void NavigationPlugin::drawPlugin(const ANPBitmap& bitmap, const ANPRectI& clip) {
- ANPCanvas* canvas = gCanvasI.newCanvas(&bitmap);
-
- ANPRectF clipR;
- clipR.left = clip.left;
- clipR.top = clip.top;
- clipR.right = clip.right;
- clipR.bottom = clip.bottom;
- gCanvasI.clipRect(canvas, &clipR);
-
- draw(canvas);
- gCanvasI.deleteCanvas(canvas);
-}
-
-void NavigationPlugin::draw(ANPCanvas* canvas) {
- NPP instance = this->inst();
- PluginObject *obj = (PluginObject*) instance->pdata;
-
- const int W = obj->window->width;
- const int H = obj->window->height;
- const int Wm = W/2;
- const int Hm = H/2;
-
- // color the plugin canvas
- gCanvasI.drawColor(canvas, (m_hasFocus) ? 0xFFCDCDCD : 0xFF545454);
-
- // draw the nav up box (5 px from the top edge)
- m_navUp.left = Wm - 15;
- m_navUp.top = 5;
- m_navUp.right = m_navUp.left + 30;
- m_navUp.bottom = m_navUp.top + 30;
- gCanvasI.drawRect(canvas, &m_navUp, getPaint(&m_navUp));
-
- // draw the nav down box (5 px from the bottom edge)
- m_navDown.left = Wm - 15;
- m_navDown.top = H - (30 + 5);
- m_navDown.right = m_navDown.left + 30;
- m_navDown.bottom = m_navDown.top + 30;
- gCanvasI.drawRect(canvas, &m_navDown, getPaint(&m_navDown));
-
- // draw the nav left box (5 px from the left edge)
- m_navLeft.left = 5;
- m_navLeft.top = Hm - 15;
- m_navLeft.right = m_navLeft.left + 30;
- m_navLeft.bottom = m_navLeft.top + 30;
- gCanvasI.drawRect(canvas, &m_navLeft, getPaint(&m_navLeft));
-
- // draw the nav right box (5 px from the right edge)
- m_navRight.left = W - (30 + 5);
- m_navRight.top = Hm - 15;
- m_navRight.right = m_navRight.left + 30;
- m_navRight.bottom = m_navRight.top + 30;
- gCanvasI.drawRect(canvas, &m_navRight, getPaint(&m_navRight));
-
- // draw the nav center box
- m_navCenter.left = Wm - 15;
- m_navCenter.top = Hm - 15;
- m_navCenter.right = m_navCenter.left + 30;
- m_navCenter.bottom = m_navCenter.top + 30;
- gCanvasI.drawRect(canvas, &m_navCenter, getPaint(&m_navCenter));
-
- gLogI.log(kDebug_ANPLogType, "----%p Drawing Plugin", inst());
-}
-
-ANPPaint* NavigationPlugin::getPaint(ANPRectF* input) {
- return (input == m_activeNav) ? m_paintActive : m_paintDisabled;
-}
-
-int16 NavigationPlugin::handleEvent(const ANPEvent* evt) {
- NPP instance = this->inst();
-
- switch (evt->eventType) {
- case kDraw_ANPEventType:
- switch (evt->data.draw.model) {
- case kBitmap_ANPDrawingModel:
- drawPlugin(evt->data.draw.data.bitmap, evt->data.draw.clip);
- return 1;
- default:
- break; // unknown drawing model
- }
- break;
-
- case kLifecycle_ANPEventType:
- if (evt->data.lifecycle.action == kLoseFocus_ANPLifecycleAction) {
- gLogI.log(kDebug_ANPLogType, "----%p Loosing Focus", instance);
- m_hasFocus = false;
- inval(instance);
- return 1;
- }
- else if (evt->data.lifecycle.action == kGainFocus_ANPLifecycleAction) {
- gLogI.log(kDebug_ANPLogType, "----%p Gaining Focus", instance);
- m_hasFocus = true;
- inval(instance);
- return 1;
- }
- break;
-
- case kMouse_ANPEventType:
- return 1;
-
- case kKey_ANPEventType:
- if (evt->data.key.action == kDown_ANPKeyAction) {
- bool result = handleNavigation(evt->data.key.nativeCode);
- inval(instance);
- return result;
- }
- return 1;
-
- default:
- break;
- }
- return 0; // unknown or unhandled event
-}
-
-bool NavigationPlugin::handleNavigation(ANPKeyCode keyCode) {
- NPP instance = this->inst();
-
- gLogI.log(kDebug_ANPLogType, "----%p Received Key %d", instance, keyCode);
-
- switch (keyCode) {
- case kDpadUp_ANPKeyCode:
- m_activeNav = &m_navUp;
- break;
- case kDpadDown_ANPKeyCode:
- m_activeNav = &m_navDown;
- break;
- case kDpadLeft_ANPKeyCode:
- m_activeNav = &m_navLeft;
- break;
- case kDpadRight_ANPKeyCode:
- m_activeNav = &m_navRight;
- break;
- case kDpadCenter_ANPKeyCode:
- m_activeNav = &m_navCenter;
- break;
- case kQ_ANPKeyCode:
- case kDel_ANPKeyCode:
- m_activeNav = NULL;
- return false;
- default:
- m_activeNav = NULL;
- break;
- }
- return true;
-}
diff --git a/samples/BrowserPlugin/jni/navigation/NavigationPlugin.h b/samples/BrowserPlugin/jni/navigation/NavigationPlugin.h
deleted file mode 100644
index ca12ae7..0000000
--- a/samples/BrowserPlugin/jni/navigation/NavigationPlugin.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2010, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "PluginObject.h"
-
-#ifndef navigationPlugin__DEFINED
-#define navigationPlugin__DEFINED
-
-class NavigationPlugin : public SubPlugin {
-public:
- NavigationPlugin(NPP inst);
- virtual ~NavigationPlugin();
- virtual bool supportsDrawingModel(ANPDrawingModel);
- virtual int16 handleEvent(const ANPEvent* evt);
-private:
- void draw(ANPCanvas*);
- void drawPlugin(const ANPBitmap& bitmap, const ANPRectI& clip);
-
- bool m_hasFocus;
-
- ANPRectF* m_activeNav;
- ANPRectF m_navUp;
- ANPRectF m_navDown;
- ANPRectF m_navLeft;
- ANPRectF m_navRight;
- ANPRectF m_navCenter;
-
- ANPPaint* m_paintDisabled;
- ANPPaint* m_paintActive;
-
- bool handleNavigation(ANPKeyCode keyCode);
- ANPPaint* getPaint(ANPRectF*);
-};
-
-#endif // navigationPlugin__DEFINED
diff --git a/samples/BrowserPlugin/jni/paint/PaintPlugin.cpp b/samples/BrowserPlugin/jni/paint/PaintPlugin.cpp
deleted file mode 100644
index 71b9f24..0000000
--- a/samples/BrowserPlugin/jni/paint/PaintPlugin.cpp
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
- * Copyright 2009, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "PaintPlugin.h"
-
-#include <fcntl.h>
-#include <math.h>
-#include <string.h>
-
-extern NPNetscapeFuncs* browser;
-extern ANPLogInterfaceV0 gLogI;
-extern ANPCanvasInterfaceV0 gCanvasI;
-extern ANPPaintInterfaceV0 gPaintI;
-extern ANPPathInterfaceV0 gPathI;
-extern ANPSurfaceInterfaceV0 gSurfaceI;
-extern ANPSystemInterfaceV0 gSystemI;
-extern ANPTypefaceInterfaceV0 gTypefaceI;
-extern ANPWindowInterfaceV0 gWindowI;
-
-///////////////////////////////////////////////////////////////////////////////
-
-PaintPlugin::PaintPlugin(NPP inst) : SurfaceSubPlugin(inst) {
-
- m_isTouchActive = false;
- m_isTouchCurrentInput = true;
- m_activePaintColor = s_redColor;
-
- memset(&m_drawingSurface, 0, sizeof(m_drawingSurface));
- memset(&m_inputToggle, 0, sizeof(m_inputToggle));
- memset(&m_colorToggle, 0, sizeof(m_colorToggle));
- memset(&m_fullScreenToggle, 0, sizeof(m_fullScreenToggle));
- memset(&m_clearSurface, 0, sizeof(m_clearSurface));
-
- // initialize the drawing surface
- m_surface = NULL;
-
- // initialize the path
- m_touchPath = gPathI.newPath();
- if(!m_touchPath)
- gLogI.log(kError_ANPLogType, "----%p Unable to create the touch path", inst);
-
- // initialize the paint colors
- m_paintSurface = gPaintI.newPaint();
- gPaintI.setFlags(m_paintSurface, gPaintI.getFlags(m_paintSurface) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paintSurface, 0xFFC0C0C0);
- gPaintI.setTextSize(m_paintSurface, 18);
-
- m_paintButton = gPaintI.newPaint();
- gPaintI.setFlags(m_paintButton, gPaintI.getFlags(m_paintButton) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(m_paintButton, 0xFFA8A8A8);
-
- // initialize the typeface (set the colors)
- ANPTypeface* tf = gTypefaceI.createFromName("serif", kItalic_ANPTypefaceStyle);
- gPaintI.setTypeface(m_paintSurface, tf);
- gTypefaceI.unref(tf);
-
- //register for touch events
- ANPEventFlags flags = kTouch_ANPEventFlag;
- NPError err = browser->setvalue(inst, kAcceptEvents_ANPSetValue, &flags);
- if (err != NPERR_NO_ERROR) {
- gLogI.log(kError_ANPLogType, "Error selecting input events.");
- }
-}
-
-PaintPlugin::~PaintPlugin() {
- gPathI.deletePath(m_touchPath);
- gPaintI.deletePaint(m_paintSurface);
- gPaintI.deletePaint(m_paintButton);
-
- setContext(NULL);
- destroySurface();
-}
-
-ANPCanvas* PaintPlugin::getCanvas(ANPRectI* dirtyRect) {
-
- ANPBitmap bitmap;
- JNIEnv* env = NULL;
- if (!m_surface || gVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK ||
- !gSurfaceI.lock(env, m_surface, &bitmap, dirtyRect)) {
- return NULL;
- }
-
- ANPCanvas* canvas = gCanvasI.newCanvas(&bitmap);
-
- // clip the canvas to the dirty rect b/c the surface is only required to
- // copy a minimum of the dirty rect and may copy more. The clipped canvas
- // however will never write to pixels outside of the clipped area.
- if (dirtyRect) {
- ANPRectF clipR;
- clipR.left = dirtyRect->left;
- clipR.top = dirtyRect->top;
- clipR.right = dirtyRect->right;
- clipR.bottom = dirtyRect->bottom;
- gCanvasI.clipRect(canvas, &clipR);
- }
-
- return canvas;
-}
-
-ANPCanvas* PaintPlugin::getCanvas(ANPRectF* dirtyRect) {
-
- ANPRectI newRect;
- newRect.left = (int) dirtyRect->left;
- newRect.top = (int) dirtyRect->top;
- newRect.right = (int) dirtyRect->right;
- newRect.bottom = (int) dirtyRect->bottom;
-
- return getCanvas(&newRect);
-}
-
-void PaintPlugin::releaseCanvas(ANPCanvas* canvas) {
- JNIEnv* env = NULL;
- if (m_surface && gVM->GetEnv((void**) &env, JNI_VERSION_1_4) == JNI_OK) {
- gSurfaceI.unlock(env, m_surface);
- }
- gCanvasI.deleteCanvas(canvas);
-}
-
-void PaintPlugin::drawCleanPlugin(ANPCanvas* canvas) {
- NPP instance = this->inst();
- PluginObject *obj = (PluginObject*) instance->pdata;
-
- // if no canvas get a locked canvas
- if (!canvas)
- canvas = getCanvas();
-
- if (!canvas)
- return;
-
- const float buttonWidth = 60;
- const float buttonHeight = 30;
- const int W = obj->window->width;
- const int H = obj->window->height;
-
- // color the plugin canvas
- gCanvasI.drawColor(canvas, 0xFFCDCDCD);
-
- // get font metrics
- ANPFontMetrics fontMetrics;
- gPaintI.getFontMetrics(m_paintSurface, &fontMetrics);
-
- // draw the input toggle button
- m_inputToggle.left = 5;
- m_inputToggle.top = H - buttonHeight - 5;
- m_inputToggle.right = m_inputToggle.left + buttonWidth;
- m_inputToggle.bottom = m_inputToggle.top + buttonHeight;
- gCanvasI.drawRect(canvas, &m_inputToggle, m_paintButton);
- const char* inputText = m_isTouchCurrentInput ? "Touch" : "Mouse";
- gCanvasI.drawText(canvas, inputText, strlen(inputText), m_inputToggle.left + 5,
- m_inputToggle.top - fontMetrics.fTop, m_paintSurface);
-
- // draw the color selector button
- m_colorToggle.left = (W/3) - (buttonWidth/2);
- m_colorToggle.top = H - buttonHeight - 5;
- m_colorToggle.right = m_colorToggle.left + buttonWidth;
- m_colorToggle.bottom = m_colorToggle.top + buttonHeight;
- gCanvasI.drawRect(canvas, &m_colorToggle, m_paintButton);
- const char* colorText = getColorText();
- gCanvasI.drawText(canvas, colorText, strlen(colorText), m_colorToggle.left + 5,
- m_colorToggle.top - fontMetrics.fTop, m_paintSurface);
-
- // draw the full-screen toggle button
- m_fullScreenToggle.left = ((W*2)/3) - (buttonWidth/2);
- m_fullScreenToggle.top = H - buttonHeight - 5;
- m_fullScreenToggle.right = m_fullScreenToggle.left + buttonWidth;
- m_fullScreenToggle.bottom = m_fullScreenToggle.top + buttonHeight;
- gCanvasI.drawRect(canvas, &m_fullScreenToggle, m_paintButton);
- const char* fullScreenText = "Full";
- gCanvasI.drawText(canvas, fullScreenText, strlen(fullScreenText),
- m_fullScreenToggle.left + 5,
- m_fullScreenToggle.top - fontMetrics.fTop, m_paintSurface);
-
- // draw the clear canvas button
- m_clearSurface.left = W - buttonWidth - 5;
- m_clearSurface.top = H - buttonHeight - 5;
- m_clearSurface.right = m_clearSurface.left + buttonWidth;
- m_clearSurface.bottom = m_clearSurface.top + buttonHeight;
- gCanvasI.drawRect(canvas, &m_clearSurface, m_paintButton);
- const char* clearText = "Clear";
- gCanvasI.drawText(canvas, clearText, strlen(clearText), m_clearSurface.left + 5,
- m_clearSurface.top - fontMetrics.fTop, m_paintSurface);
-
- // draw the drawing surface box (5 px from the edge)
- m_drawingSurface.left = 5;
- m_drawingSurface.top = 5;
- m_drawingSurface.right = W - 5;
- m_drawingSurface.bottom = m_colorToggle.top - 5;
- gCanvasI.drawRect(canvas, &m_drawingSurface, m_paintSurface);
-
- // release the canvas
- releaseCanvas(canvas);
-}
-
-const char* PaintPlugin::getColorText() {
-
- if (m_activePaintColor == s_blueColor)
- return "Blue";
- else if (m_activePaintColor == s_greenColor)
- return "Green";
- else
- return "Red";
-}
-
-jobject PaintPlugin::getSurface() {
- if (m_surface) {
- return m_surface;
- }
-
- // load the appropriate java class and instantiate it
- JNIEnv* env = NULL;
- if (gVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- gLogI.log(kError_ANPLogType, " ---- getSurface: failed to get env");
- return NULL;
- }
-
- const char* className = "com.android.sampleplugin.PaintSurface";
- jclass paintClass = gSystemI.loadJavaClass(inst(), className);
-
- if(!paintClass) {
- gLogI.log(kError_ANPLogType, " ---- getSurface: failed to load class");
- return NULL;
- }
-
- PluginObject *obj = (PluginObject*) inst()->pdata;
- const int pW = obj->window->width;
- const int pH = obj->window->height;
-
- jmethodID constructor = env->GetMethodID(paintClass, "<init>", "(Landroid/content/Context;III)V");
- jobject paintSurface = env->NewObject(paintClass, constructor, m_context, (int)inst(), pW, pH);
-
- if(!paintSurface) {
- gLogI.log(kError_ANPLogType, " ---- getSurface: failed to construct object");
- return NULL;
- }
-
- m_surface = env->NewGlobalRef(paintSurface);
- return m_surface;
-}
-
-void PaintPlugin::destroySurface() {
- JNIEnv* env = NULL;
- if (m_surface && gVM->GetEnv((void**) &env, JNI_VERSION_1_4) == JNI_OK) {
-
- // detach the native code from the object
- jclass javaClass = env->GetObjectClass(m_surface);
- jmethodID invalMethod = env->GetMethodID(javaClass, "invalidateNPP", "()V");
- env->CallVoidMethod(m_surface, invalMethod);
-
- env->DeleteGlobalRef(m_surface);
- m_surface = NULL;
- }
-}
-
-int16 PaintPlugin::handleEvent(const ANPEvent* evt) {
- switch (evt->eventType) {
- case kTouch_ANPEventType: {
- float x = (float) evt->data.touch.x;
- float y = (float) evt->data.touch.y;
- if (kDown_ANPTouchAction == evt->data.touch.action && m_isTouchCurrentInput) {
-
- ANPRectF* rect = validTouch(evt->data.touch.x, evt->data.touch.y);
- if(rect == &m_drawingSurface) {
- m_isTouchActive = true;
- gPathI.moveTo(m_touchPath, x, y);
- paintTouch();
- return 1;
- }
-
- } else if (kMove_ANPTouchAction == evt->data.touch.action && m_isTouchActive) {
- gPathI.lineTo(m_touchPath, x, y);
- paintTouch();
- return 1;
- } else if (kUp_ANPTouchAction == evt->data.touch.action && m_isTouchActive) {
- gPathI.lineTo(m_touchPath, x, y);
- paintTouch();
- m_isTouchActive = false;
- gPathI.reset(m_touchPath);
- return 1;
- } else if (kCancel_ANPTouchAction == evt->data.touch.action) {
- m_isTouchActive = false;
- gPathI.reset(m_touchPath);
- return 1;
- } else if (kDoubleTap_ANPTouchAction == evt->data.touch.action) {
- gWindowI.requestCenterFitZoom(inst());
- return 1;
-
- }
- break;
- }
- case kMouse_ANPEventType: {
-
- if (m_isTouchActive)
- gLogI.log(kError_ANPLogType, "----%p Received unintended mouse event", inst());
-
- if (kDown_ANPMouseAction == evt->data.mouse.action) {
- ANPRectF* rect = validTouch(evt->data.mouse.x, evt->data.mouse.y);
- if (rect == &m_drawingSurface)
- paintMouse(evt->data.mouse.x, evt->data.mouse.y);
- else if (rect == &m_inputToggle)
- toggleInputMethod();
- else if (rect == &m_colorToggle)
- togglePaintColor();
- else if (rect == &m_fullScreenToggle)
- gWindowI.requestFullScreen(inst());
- else if (rect == &m_clearSurface)
- drawCleanPlugin();
- }
- return 1;
- }
- case kCustom_ANPEventType: {
-
- switch (evt->data.other[0]) {
- case kSurfaceCreated_CustomEvent:
- gLogI.log(kDebug_ANPLogType, " ---- customEvent: surfaceCreated");
- /* The second draw call is added to cover up a problem in this
- plugin and is not a recommended usage pattern. This plugin
- does not correctly make partial updates to the double
- buffered surface and this second call hides that problem.
- */
- drawCleanPlugin();
- drawCleanPlugin();
- break;
- case kSurfaceChanged_CustomEvent: {
- gLogI.log(kDebug_ANPLogType, " ---- customEvent: surfaceChanged");
-
- int width = evt->data.other[1];
- int height = evt->data.other[2];
-
- PluginObject *obj = (PluginObject*) inst()->pdata;
- const int pW = obj->window->width;
- const int pH = obj->window->height;
- // compare to the plugin's surface dimensions
- if (pW != width || pH != height)
- gLogI.log(kError_ANPLogType,
- "----%p Invalid Surface Dimensions (%d,%d):(%d,%d)",
- inst(), pW, pH, width, height);
- break;
- }
- case kSurfaceDestroyed_CustomEvent:
- gLogI.log(kDebug_ANPLogType, " ---- customEvent: surfaceDestroyed");
- break;
- }
- break; // end KCustom_ANPEventType
- }
- default:
- break;
- }
- return 0; // unknown or unhandled event
-}
-
-ANPRectF* PaintPlugin::validTouch(int x, int y) {
-
- //convert to float
- float fx = (int) x;
- float fy = (int) y;
-
- if (fx > m_drawingSurface.left && fx < m_drawingSurface.right && fy > m_drawingSurface.top && fy < m_drawingSurface.bottom)
- return &m_drawingSurface;
- else if (fx > m_inputToggle.left && fx < m_inputToggle.right && fy > m_inputToggle.top && fy < m_inputToggle.bottom)
- return &m_inputToggle;
- else if (fx > m_colorToggle.left && fx < m_colorToggle.right && fy > m_colorToggle.top && fy < m_colorToggle.bottom)
- return &m_colorToggle;
- else if (fx > m_fullScreenToggle.left && fx < m_fullScreenToggle.right && fy > m_fullScreenToggle.top && fy < m_fullScreenToggle.bottom)
- return &m_fullScreenToggle;
- else if (fx > m_clearSurface.left && fx < m_clearSurface.right && fy > m_clearSurface.top && fy < m_clearSurface.bottom)
- return &m_clearSurface;
- else
- return NULL;
-}
-
-void PaintPlugin::toggleInputMethod() {
- m_isTouchCurrentInput = !m_isTouchCurrentInput;
-
- // lock only the input toggle and redraw the canvas
- ANPCanvas* lockedCanvas = getCanvas(&m_inputToggle);
- drawCleanPlugin(lockedCanvas);
-}
-
-void PaintPlugin::togglePaintColor() {
- if (m_activePaintColor == s_blueColor)
- m_activePaintColor = s_redColor;
- else if (m_activePaintColor == s_greenColor)
- m_activePaintColor = s_blueColor;
- else
- m_activePaintColor = s_greenColor;
-
- // lock only the color toggle and redraw the canvas
- ANPCanvas* lockedCanvas = getCanvas(&m_colorToggle);
- drawCleanPlugin(lockedCanvas);
-}
-
-void PaintPlugin::paintMouse(int x, int y) {
- //TODO do not paint outside the drawing surface
-
- //create the paint color
- ANPPaint* fillPaint = gPaintI.newPaint();
- gPaintI.setFlags(fillPaint, gPaintI.getFlags(fillPaint) | kAntiAlias_ANPPaintFlag);
- gPaintI.setStyle(fillPaint, kFill_ANPPaintStyle);
- gPaintI.setColor(fillPaint, m_activePaintColor);
-
- // handle the simple "mouse" paint (draw a point)
- ANPRectF point;
- point.left = (float) x-3;
- point.top = (float) y-3;
- point.right = (float) x+3;
- point.bottom = (float) y+3;
-
- // get a canvas that is only locked around the point and draw it
- ANPCanvas* canvas = getCanvas(&point);
- gCanvasI.drawOval(canvas, &point, fillPaint);
-
- // clean up
- releaseCanvas(canvas);
- gPaintI.deletePaint(fillPaint);
-}
-
-void PaintPlugin::paintTouch() {
- //TODO do not paint outside the drawing surface
-
- //create the paint color
- ANPPaint* strokePaint = gPaintI.newPaint();
- gPaintI.setFlags(strokePaint, gPaintI.getFlags(strokePaint) | kAntiAlias_ANPPaintFlag);
- gPaintI.setColor(strokePaint, m_activePaintColor);
- gPaintI.setStyle(strokePaint, kStroke_ANPPaintStyle);
- gPaintI.setStrokeWidth(strokePaint, 6.0);
- gPaintI.setStrokeCap(strokePaint, kRound_ANPPaintCap);
- gPaintI.setStrokeJoin(strokePaint, kRound_ANPPaintJoin);
-
- // handle the complex "touch" paint (draw a line)
- ANPRectF bounds;
- gPathI.getBounds(m_touchPath, &bounds);
-
- // get a canvas that is only locked around the point and draw the path
- ANPCanvas* canvas = getCanvas(&bounds);
- gCanvasI.drawPath(canvas, m_touchPath, strokePaint);
-
- // clean up
- releaseCanvas(canvas);
- gPaintI.deletePaint(strokePaint);
-}
diff --git a/samples/BrowserPlugin/jni/paint/PaintPlugin.h b/samples/BrowserPlugin/jni/paint/PaintPlugin.h
deleted file mode 100644
index 035e51b..0000000
--- a/samples/BrowserPlugin/jni/paint/PaintPlugin.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2009, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "PluginObject.h"
-#include <stdio.h>
-
-#ifndef paintPlugin__DEFINED
-#define paintPlugin__DEFINED
-
-class PaintPlugin : public SurfaceSubPlugin {
-public:
- PaintPlugin(NPP inst);
- virtual ~PaintPlugin();
- virtual int16 handleEvent(const ANPEvent* evt);
- virtual jobject getSurface();
-
-private:
- void drawCleanPlugin(ANPCanvas* canvas = NULL);
- ANPCanvas* getCanvas(ANPRectI* dirtyRect = NULL);
- ANPCanvas* getCanvas(ANPRectF* dirtyRect);
- const char* getColorText();
- void destroySurface();
- void paintMouse(int x, int y);
- void paintTouch();
- void releaseCanvas(ANPCanvas*);
- void toggleInputMethod();
- void togglePaintColor();
- ANPRectF* validTouch(int x, int y);
-
- bool m_isTouchActive;
- bool m_isTouchCurrentInput;
-
- jobject m_surface;
- ANPPath* m_touchPath;
-
- ANPRectF m_drawingSurface;
- ANPRectF m_inputToggle;
- ANPRectF m_colorToggle;
- ANPRectF m_fullScreenToggle;
- ANPRectF m_clearSurface;
-
- ANPPaint* m_paintSurface;
- ANPPaint* m_paintButton;
-
- ANPColor m_activePaintColor;
- static const ANPColor s_redColor = 0xFFFF0000;
- static const ANPColor s_greenColor = 0xFF00FF00;
- static const ANPColor s_blueColor = 0xFF0000FF;
-};
-
-#endif // paintPlugin__DEFINED
diff --git a/samples/BrowserPlugin/jni/video/VideoPlugin.cpp b/samples/BrowserPlugin/jni/video/VideoPlugin.cpp
deleted file mode 100644
index f24295b..0000000
--- a/samples/BrowserPlugin/jni/video/VideoPlugin.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright 2009, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "VideoPlugin.h"
-#include "android_npapi.h"
-
-#include <stdio.h>
-#include <sys/time.h>
-#include <time.h>
-#include <math.h>
-#include <string.h>
-
-extern NPNetscapeFuncs* browser;
-extern ANPBitmapInterfaceV0 gBitmapI;
-extern ANPCanvasInterfaceV0 gCanvasI;
-extern ANPLogInterfaceV0 gLogI;
-extern ANPPaintInterfaceV0 gPaintI;
-extern ANPSurfaceInterfaceV0 gSurfaceI;
-extern ANPSystemInterfaceV0 gSystemI;
-extern ANPTypefaceInterfaceV0 gTypefaceI;
-extern ANPWindowInterfaceV0 gWindowI;
-
-///////////////////////////////////////////////////////////////////////////////
-
-VideoPlugin::VideoPlugin(NPP inst) : SurfaceSubPlugin(inst) {
-
- // initialize the drawing surface
- m_surface = NULL;
-
- //register for touch events
- ANPEventFlags flags = kTouch_ANPEventFlag;
- NPError err = browser->setvalue(inst, kAcceptEvents_ANPSetValue, &flags);
- if (err != NPERR_NO_ERROR) {
- gLogI.log(kError_ANPLogType, "Error selecting input events.");
- }
-}
-
-VideoPlugin::~VideoPlugin() {
- setContext(NULL);
- destroySurface();
-}
-
-jobject VideoPlugin::getSurface() {
-
- if (m_surface) {
- return m_surface;
- }
-
- // load the appropriate java class and instantiate it
- JNIEnv* env = NULL;
- if (gVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- gLogI.log(kError_ANPLogType, " ---- getSurface: failed to get env");
- return NULL;
- }
-
- const char* className = "com.android.sampleplugin.VideoSurface";
- jclass videoClass = gSystemI.loadJavaClass(inst(), className);
-
- if(!videoClass) {
- gLogI.log(kError_ANPLogType, " ---- getSurface: failed to load class");
- return NULL;
- }
-
- jmethodID constructor = env->GetMethodID(videoClass, "<init>", "(Landroid/content/Context;)V");
- jobject videoSurface = env->NewObject(videoClass, constructor, m_context);
-
- if(!videoSurface) {
- gLogI.log(kError_ANPLogType, " ---- getSurface: failed to construct object");
- return NULL;
- }
-
- m_surface = env->NewGlobalRef(videoSurface);
- return m_surface;
-}
-
-void VideoPlugin::destroySurface() {
- JNIEnv* env = NULL;
- if (m_surface && gVM->GetEnv((void**) &env, JNI_VERSION_1_4) == JNI_OK) {
- env->DeleteGlobalRef(m_surface);
- m_surface = NULL;
- }
-}
-
-int16 VideoPlugin::handleEvent(const ANPEvent* evt) {
- switch (evt->eventType) {
- case kLifecycle_ANPEventType: {
- switch (evt->data.lifecycle.action) {
- case kEnterFullScreen_ANPLifecycleAction:
- gLogI.log(kDebug_ANPLogType, " ---- %p entering fullscreen", inst());
- break;
- case kExitFullScreen_ANPLifecycleAction:
- gLogI.log(kDebug_ANPLogType, " ---- %p exiting fullscreen", inst());
- break;
- }
- break; // end kLifecycle_ANPEventType
- }
- case kDraw_ANPEventType:
- gLogI.log(kError_ANPLogType, " ------ %p the plugin did not request draw events", inst());
- break;
- case kTouch_ANPEventType:
- if (kDown_ANPTouchAction == evt->data.touch.action) {
- gLogI.log(kDebug_ANPLogType, " ------ %p requesting fullscreen mode", inst());
- gWindowI.requestFullScreen(inst());
- }
- return 1;
- case kKey_ANPEventType:
- gLogI.log(kError_ANPLogType, " ------ %p the plugin did not request key events", inst());
- break;
- default:
- break;
- }
- return 0; // unknown or unhandled event
-}
diff --git a/samples/BrowserPlugin/jni/video/VideoPlugin.h b/samples/BrowserPlugin/jni/video/VideoPlugin.h
deleted file mode 100644
index 701e2d0..0000000
--- a/samples/BrowserPlugin/jni/video/VideoPlugin.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2009, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "PluginObject.h"
-
-#ifndef videoPlugin__DEFINED
-#define videoPlugin__DEFINED
-
-class VideoPlugin : public SurfaceSubPlugin {
-public:
- VideoPlugin(NPP inst);
- virtual ~VideoPlugin();
- virtual int16 handleEvent(const ANPEvent* evt);
- virtual jobject getSurface();
-
-private:
- void destroySurface();
-
- jobject m_surface;
-};
-
-#endif // videoPlugin__DEFINED
diff --git a/samples/BrowserPlugin/res/drawable-hdpi/sample_browser_plugin.png b/samples/BrowserPlugin/res/drawable-hdpi/sample_browser_plugin.png
deleted file mode 100755
index 4d9d559..0000000
--- a/samples/BrowserPlugin/res/drawable-hdpi/sample_browser_plugin.png
+++ /dev/null
Binary files differ
diff --git a/samples/BrowserPlugin/res/drawable-mdpi/sample_browser_plugin.png b/samples/BrowserPlugin/res/drawable-mdpi/sample_browser_plugin.png
deleted file mode 100755
index 47c79d1..0000000
--- a/samples/BrowserPlugin/res/drawable-mdpi/sample_browser_plugin.png
+++ /dev/null
Binary files differ
diff --git a/samples/BrowserPlugin/res/values/strings.xml b/samples/BrowserPlugin/res/values/strings.xml
deleted file mode 100644
index 1f8dd49..0000000
--- a/samples/BrowserPlugin/res/values/strings.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- * Copyright (C) 2009 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.
--->
-<resources>
- <string name="sample_browser_plugin">Sample Browser Plugin</string>
-</resources>
diff --git a/samples/BrowserPlugin/src/com/android/sampleplugin/BackgroundSurface.java b/samples/BrowserPlugin/src/com/android/sampleplugin/BackgroundSurface.java
deleted file mode 100644
index 5af8c8e..0000000
--- a/samples/BrowserPlugin/src/com/android/sampleplugin/BackgroundSurface.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.android.sampleplugin;
-
-import android.content.Context;
-import android.graphics.Color;
-import android.widget.TextView;
-
-public class BackgroundSurface extends TextView {
-
- public BackgroundSurface(Context context) {
- super(context);
-
- this.setBackgroundColor(Color.BLACK);
- this.setTextColor(Color.WHITE);
- this.setText("This is a java background plugin");
-
- // ensure that the view system is aware that we will be drawing
- this.setWillNotDraw(false);
- }
-}
diff --git a/samples/BrowserPlugin/src/com/android/sampleplugin/BackgroundTest.java b/samples/BrowserPlugin/src/com/android/sampleplugin/BackgroundTest.java
deleted file mode 100644
index 1f6b0d4..0000000
--- a/samples/BrowserPlugin/src/com/android/sampleplugin/BackgroundTest.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.android.sampleplugin;
-
-public class BackgroundTest {
-
- public BackgroundTest() {}
-
- public int addInt(int x, int y) {
- return x + y;
- }
-
-}
diff --git a/samples/BrowserPlugin/src/com/android/sampleplugin/PaintSurface.java b/samples/BrowserPlugin/src/com/android/sampleplugin/PaintSurface.java
deleted file mode 100644
index 9582bcc..0000000
--- a/samples/BrowserPlugin/src/com/android/sampleplugin/PaintSurface.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright 2009, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package com.android.sampleplugin;
-
-import android.content.Context;
-import android.graphics.PixelFormat;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-import android.view.SurfaceHolder.Callback;
-
-public class PaintSurface extends SurfaceView {
-
- static {
- //needed for jni calls
- System.loadLibrary("sampleplugin");
- }
-
- private final int npp;
-
- private boolean validNPP = true;
- private Object nppLock = new Object();
-
- public PaintSurface(Context context, int NPP, int width, int height) {
- super(context);
-
- this.npp = NPP;
-
- this.getHolder().setFormat(PixelFormat.RGBA_8888);
- this.getHolder().addCallback(new Callback() {
-
- public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
- synchronized (nppLock) {
- if (validNPP) {
- nativeSurfaceChanged(npp, format, width, height);
- }
- }
- }
-
- public void surfaceCreated(SurfaceHolder holder) {
- synchronized (nppLock) {
- if (validNPP) {
- nativeSurfaceCreated(npp);
- }
- }
- }
-
- public void surfaceDestroyed(SurfaceHolder holder) {
- synchronized (nppLock) {
- if (validNPP) {
- nativeSurfaceDestroyed(npp);
- }
- }
- }
- });
-
- // sets the plugin's surface to a fixed size
- this.getHolder().setFixedSize(width, height);
-
- // ensure that the view system is aware that we will be drawing
- this.setWillNotDraw(false);
- }
-
- // called by JNI
- private void invalidateNPP() {
- synchronized (nppLock) {
- validNPP = false;
- }
- }
-
- private native void nativeSurfaceCreated(int npp);
- private native void nativeSurfaceChanged(int npp, int format, int width, int height);
- private native void nativeSurfaceDestroyed(int npp);
-}
diff --git a/samples/BrowserPlugin/src/com/android/sampleplugin/SamplePlugin.java b/samples/BrowserPlugin/src/com/android/sampleplugin/SamplePlugin.java
deleted file mode 100644
index b5b728e..0000000
--- a/samples/BrowserPlugin/src/com/android/sampleplugin/SamplePlugin.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright 2009, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package com.android.sampleplugin;
-
-import android.app.Service;
-import android.content.Intent;
-import android.os.IBinder;
-
-public class SamplePlugin extends Service {
-
- @Override
- public IBinder onBind(Intent intent) {
- // TODO Auto-generated method stub
- return null;
- }
-}
diff --git a/samples/BrowserPlugin/src/com/android/sampleplugin/VideoSurface.java b/samples/BrowserPlugin/src/com/android/sampleplugin/VideoSurface.java
deleted file mode 100644
index a3c80cf..0000000
--- a/samples/BrowserPlugin/src/com/android/sampleplugin/VideoSurface.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright 2009, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package com.android.sampleplugin;
-
-import com.android.sampleplugin.graphics.CubeRenderer;
-
-import android.content.Context;
-import android.opengl.GLSurfaceView;
-import android.view.WindowManager;
-import android.widget.FrameLayout;
-import android.widget.MediaController;
-import android.widget.VideoView;
-
-public class VideoSurface extends FrameLayout {
-
- public VideoSurface(Context context) {
- super(context);
-
- LayoutParams fp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
- this.setLayoutParams(fp);
-
-// VideoView video = new VideoView(context);
-// LayoutParams vp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
-// vp.setLayoutParams(vp);
-
- GLSurfaceView gl = new GLSurfaceView(context);
- LayoutParams gp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
- gl.setLayoutParams(gp);
-
- this.addView(gl);
-// this.addView(video);
-
- // Tell the cube renderer that we want to render a translucent version
- // of the cube:
- gl.setRenderer(new CubeRenderer(false));
- gl.setWindowType(WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY);
-
-// video.setVideoPath("/sdcard/test_video.3gp");
-// video.setMediaController(new MediaController(context));
-// video.requestFocus();
-
- // ensure that the view system is aware that we will be drawing
- this.setWillNotDraw(false);
- }
-}
diff --git a/samples/BrowserPlugin/src/com/android/sampleplugin/graphics/Cube.java b/samples/BrowserPlugin/src/com/android/sampleplugin/graphics/Cube.java
deleted file mode 100644
index 9ad1410..0000000
--- a/samples/BrowserPlugin/src/com/android/sampleplugin/graphics/Cube.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2009 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.sampleplugin.graphics;
-
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.nio.IntBuffer;
-
-import javax.microedition.khronos.opengles.GL10;
-
-/**
- * A vertex shaded cube.
- */
-class Cube
-{
- public Cube()
- {
- int one = 0x10000;
- int vertices[] = {
- -one, -one, -one,
- one, -one, -one,
- one, one, -one,
- -one, one, -one,
- -one, -one, one,
- one, -one, one,
- one, one, one,
- -one, one, one,
- };
-
- int colors[] = {
- 0, 0, 0, one,
- one, 0, 0, one,
- one, one, 0, one,
- 0, one, 0, one,
- 0, 0, one, one,
- one, 0, one, one,
- one, one, one, one,
- 0, one, one, one,
- };
-
- byte indices[] = {
- 0, 4, 5, 0, 5, 1,
- 1, 5, 6, 1, 6, 2,
- 2, 6, 7, 2, 7, 3,
- 3, 7, 4, 3, 4, 0,
- 4, 7, 6, 4, 6, 5,
- 3, 0, 1, 3, 1, 2
- };
-
- // Buffers to be passed to gl*Pointer() functions
- // must be direct, i.e., they must be placed on the
- // native heap where the garbage collector cannot
- // move them.
- //
- // Buffers with multi-byte datatypes (e.g., short, int, float)
- // must have their byte order set to native order
-
- ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4);
- vbb.order(ByteOrder.nativeOrder());
- mVertexBuffer = vbb.asIntBuffer();
- mVertexBuffer.put(vertices);
- mVertexBuffer.position(0);
-
- ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length*4);
- cbb.order(ByteOrder.nativeOrder());
- mColorBuffer = cbb.asIntBuffer();
- mColorBuffer.put(colors);
- mColorBuffer.position(0);
-
- mIndexBuffer = ByteBuffer.allocateDirect(indices.length);
- mIndexBuffer.put(indices);
- mIndexBuffer.position(0);
- }
-
- public void draw(GL10 gl)
- {
- gl.glFrontFace(gl.GL_CW);
- gl.glVertexPointer(3, gl.GL_FIXED, 0, mVertexBuffer);
- gl.glColorPointer(4, gl.GL_FIXED, 0, mColorBuffer);
- gl.glDrawElements(gl.GL_TRIANGLES, 36, gl.GL_UNSIGNED_BYTE, mIndexBuffer);
- }
-
- private IntBuffer mVertexBuffer;
- private IntBuffer mColorBuffer;
- private ByteBuffer mIndexBuffer;
-}
diff --git a/samples/BrowserPlugin/src/com/android/sampleplugin/graphics/CubeRenderer.java b/samples/BrowserPlugin/src/com/android/sampleplugin/graphics/CubeRenderer.java
deleted file mode 100644
index 246ac15..0000000
--- a/samples/BrowserPlugin/src/com/android/sampleplugin/graphics/CubeRenderer.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2009 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.sampleplugin.graphics;
-
-import javax.microedition.khronos.egl.EGL10;
-import javax.microedition.khronos.egl.EGLConfig;
-import javax.microedition.khronos.opengles.GL10;
-
-import android.opengl.GLSurfaceView;
-
-/**
- * Render a pair of tumbling cubes.
- */
-
-public class CubeRenderer implements GLSurfaceView.Renderer {
- public CubeRenderer(boolean useTranslucentBackground) {
- mTranslucentBackground = useTranslucentBackground;
- mCube = new Cube();
- }
-
- public void onDrawFrame(GL10 gl) {
- /*
- * Usually, the first thing one might want to do is to clear
- * the screen. The most efficient way of doing this is to use
- * glClear().
- */
-
- gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
-
- /*
- * Now we're ready to draw some 3D objects
- */
-
- gl.glMatrixMode(GL10.GL_MODELVIEW);
- gl.glLoadIdentity();
- gl.glTranslatef(0, 0, -3.0f);
- gl.glRotatef(mAngle, 0, 1, 0);
- gl.glRotatef(mAngle*0.25f, 1, 0, 0);
-
- gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
- gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
-
- mCube.draw(gl);
-
- gl.glRotatef(mAngle*2.0f, 0, 1, 1);
- gl.glTranslatef(0.5f, 0.5f, 0.5f);
-
- mCube.draw(gl);
-
- mAngle += 1.2f;
- }
-
- public void onSurfaceChanged(GL10 gl, int width, int height) {
- gl.glViewport(0, 0, width, height);
-
- /*
- * Set our projection matrix. This doesn't have to be done
- * each time we draw, but usually a new projection needs to
- * be set when the viewport is resized.
- */
-
- float ratio = (float) width / height;
- gl.glMatrixMode(GL10.GL_PROJECTION);
- gl.glLoadIdentity();
- gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
- }
-
- public void onSurfaceCreated(GL10 gl, EGLConfig config) {
- /*
- * By default, OpenGL enables features that improve quality
- * but reduce performance. One might want to tweak that
- * especially on software renderer.
- */
- gl.glDisable(GL10.GL_DITHER);
-
- /*
- * Some one-time OpenGL initialization can be made here
- * probably based on features of this particular context
- */
- gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,
- GL10.GL_FASTEST);
-
- if (mTranslucentBackground) {
- gl.glClearColor(0,0,0,0);
- } else {
- gl.glClearColor(1,1,1,1);
- }
- gl.glEnable(GL10.GL_CULL_FACE);
- gl.glShadeModel(GL10.GL_SMOOTH);
- gl.glEnable(GL10.GL_DEPTH_TEST);
- }
- private boolean mTranslucentBackground;
- private Cube mCube;
- private float mAngle;
-}