Loading api/current.xml +35 −1 Original line number Diff line number Diff line Loading @@ -77585,6 +77585,23 @@ visibility="public" > </method> <method name="rotate" return="void" abstract="false" native="true" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="x" type="float"> </parameter> <parameter name="y" type="float"> </parameter> <parameter name="z" type="float"> </parameter> </method> <method name="rotateX" return="void" abstract="false" Loading Loading @@ -77635,6 +77652,23 @@ visibility="public" > </method> <method name="setLocation" return="void" abstract="false" native="true" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="x" type="float"> </parameter> <parameter name="y" type="float"> </parameter> <parameter name="z" type="float"> </parameter> </method> <method name="translate" return="void" abstract="false" Loading Loading @@ -266659,7 +266693,7 @@ deprecated="not deprecated" visibility="public" > <parameter name="t" type="T"> <parameter name="arg0" type="T"> </parameter> </method> </interface> core/java/android/view/View.java +1 −3 Original line number Diff line number Diff line Loading @@ -5748,9 +5748,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility } mCamera.save(); mMatrix.preScale(mScaleX, mScaleY, mPivotX, mPivotY); mCamera.rotateX(mRotationX); mCamera.rotateY(mRotationY); mCamera.rotateZ(-mRotation); mCamera.rotate(mRotationX, mRotationY, -mRotation); mCamera.getMatrix(matrix3D); matrix3D.preTranslate(-mPivotX, -mPivotY); matrix3D.postTranslate(mPivotX + mTranslationX, mPivotY + mTranslationY); Loading core/jni/android/graphics/Camera.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,18 @@ static void Camera_rotateZ(JNIEnv* env, jobject obj, float degrees) { v->rotateZ(SkFloatToScalar(degrees)); } static void Camera_rotate(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) { Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); v->rotateX(SkFloatToScalar(x)); v->rotateY(SkFloatToScalar(y)); v->rotateZ(SkFloatToScalar(z)); } static void Camera_setLocation(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) { Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); v->setCameraLocation(SkFloatToScalar(x), SkFloatToScalar(y), SkFloatToScalar(z)); } static void Camera_getMatrix(JNIEnv* env, jobject obj, int native_matrix) { Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); v->getMatrix((SkMatrix*)native_matrix); Loading Loading @@ -79,6 +91,8 @@ static JNINativeMethod gCameraMethods[] = { { "rotateX", "(F)V", (void*)Camera_rotateX }, { "rotateY", "(F)V", (void*)Camera_rotateY }, { "rotateZ", "(F)V", (void*)Camera_rotateZ }, { "rotate", "(FFF)V", (void*)Camera_rotate }, { "setLocation", "(FFF)V", (void*)Camera_setLocation }, { "nativeGetMatrix", "(I)V", (void*)Camera_getMatrix }, { "nativeApplyToCanvas", "(I)V", (void*)Camera_applyToCanvas }, { "dotWithNormal", "(FFF)F", (void*)Camera_dotWithNormal } Loading graphics/java/android/graphics/Camera.java +98 −4 Original line number Diff line number Diff line Loading @@ -16,24 +16,115 @@ package android.graphics; /** * A camera instance can be used to compute 3D transformations and * generate a matrix that can be applied, for instance, on a * {@link Canvas}. */ public class Camera { /** * Creates a new camera, with empty transformations. */ public Camera() { nativeConstructor(); } /** * Saves the camera state. Each save should be balanced * with a call to {@link #restore()}. * * @see #save() */ public native void save(); /** * Restores the saved state, if any. * * @see #restore() */ public native void restore(); /** * Applies a translation transform on all three axis. * * @param x The distance to translate by on the X axis * @param y The distance to translate by on the Y axis * @param z The distance to translate by on the Z axis */ public native void translate(float x, float y, float z); /** * Applies a rotation transform around the X axis. * * @param deg The angle of rotation around the X axis, in degrees * * @see #rotateY(float) * @see #rotateZ(float) * @see #rotate(float, float, float) */ public native void rotateX(float deg); /** * Applies a rotation transform around the Y axis. * * @param deg The angle of rotation around the Y axis, in degrees * * @see #rotateX(float) * @see #rotateZ(float) * @see #rotate(float, float, float) */ public native void rotateY(float deg); /** * Applies a rotation transform around the Z axis. * * @param deg The angle of rotation around the Z axis, in degrees * * @see #rotateX(float) * @see #rotateY(float) * @see #rotate(float, float, float) */ public native void rotateZ(float deg); /** * Applies a rotation transform around all three axis. * * @param x The angle of rotation around the X axis, in degrees * @param y The angle of rotation around the Y axis, in degrees * @param z The angle of rotation around the Z axis, in degrees * * @see #rotateX(float) * @see #rotateY(float) * @see #rotateZ(float) */ public native void rotate(float x, float y, float z); /** * Sets the location of the camera. The default location is set at * 0, 0, -8. * * @param x The x location of the camera * @param y The y location of the camera * @param z The z location of the camera */ public native void setLocation(float x, float y, float z); /** * Computes the matrix corresponding to the current transformation * and copies it to the supplied matrix object. * * @param matrix The matrix to copy the current transforms into */ public void getMatrix(Matrix matrix) { nativeGetMatrix(matrix.native_instance); } /** * Computes the matrix corresponding to the current transformation * and applies it to the specified Canvas. * * @param canvas The Canvas to set the transform matrix onto */ public void applyToCanvas(Canvas canvas) { nativeApplyToCanvas(canvas.mNativeCanvas); } Loading @@ -41,7 +132,11 @@ public class Camera { public native float dotWithNormal(float dx, float dy, float dz); protected void finalize() throws Throwable { try { nativeDestructor(); } finally { super.finalize(); } } private native void nativeConstructor(); Loading @@ -51,4 +146,3 @@ public class Camera { int native_instance; } tests/HwAccelerationTest/AndroidManifest.xml +10 −0 Original line number Diff line number Diff line Loading @@ -396,6 +396,16 @@ </intent-filter> </activity> <activity android:name="Animated3dActivity" android:label="_Animated 3d" android:theme="@android:style/Theme.Translucent.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="SimplePathsActivity" android:label="_SimplePaths"> Loading Loading
api/current.xml +35 −1 Original line number Diff line number Diff line Loading @@ -77585,6 +77585,23 @@ visibility="public" > </method> <method name="rotate" return="void" abstract="false" native="true" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="x" type="float"> </parameter> <parameter name="y" type="float"> </parameter> <parameter name="z" type="float"> </parameter> </method> <method name="rotateX" return="void" abstract="false" Loading Loading @@ -77635,6 +77652,23 @@ visibility="public" > </method> <method name="setLocation" return="void" abstract="false" native="true" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > <parameter name="x" type="float"> </parameter> <parameter name="y" type="float"> </parameter> <parameter name="z" type="float"> </parameter> </method> <method name="translate" return="void" abstract="false" Loading Loading @@ -266659,7 +266693,7 @@ deprecated="not deprecated" visibility="public" > <parameter name="t" type="T"> <parameter name="arg0" type="T"> </parameter> </method> </interface>
core/java/android/view/View.java +1 −3 Original line number Diff line number Diff line Loading @@ -5748,9 +5748,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility } mCamera.save(); mMatrix.preScale(mScaleX, mScaleY, mPivotX, mPivotY); mCamera.rotateX(mRotationX); mCamera.rotateY(mRotationY); mCamera.rotateZ(-mRotation); mCamera.rotate(mRotationX, mRotationY, -mRotation); mCamera.getMatrix(matrix3D); matrix3D.preTranslate(-mPivotX, -mPivotY); matrix3D.postTranslate(mPivotX + mTranslationX, mPivotY + mTranslationY); Loading
core/jni/android/graphics/Camera.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,18 @@ static void Camera_rotateZ(JNIEnv* env, jobject obj, float degrees) { v->rotateZ(SkFloatToScalar(degrees)); } static void Camera_rotate(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) { Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); v->rotateX(SkFloatToScalar(x)); v->rotateY(SkFloatToScalar(y)); v->rotateZ(SkFloatToScalar(z)); } static void Camera_setLocation(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) { Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); v->setCameraLocation(SkFloatToScalar(x), SkFloatToScalar(y), SkFloatToScalar(z)); } static void Camera_getMatrix(JNIEnv* env, jobject obj, int native_matrix) { Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); v->getMatrix((SkMatrix*)native_matrix); Loading Loading @@ -79,6 +91,8 @@ static JNINativeMethod gCameraMethods[] = { { "rotateX", "(F)V", (void*)Camera_rotateX }, { "rotateY", "(F)V", (void*)Camera_rotateY }, { "rotateZ", "(F)V", (void*)Camera_rotateZ }, { "rotate", "(FFF)V", (void*)Camera_rotate }, { "setLocation", "(FFF)V", (void*)Camera_setLocation }, { "nativeGetMatrix", "(I)V", (void*)Camera_getMatrix }, { "nativeApplyToCanvas", "(I)V", (void*)Camera_applyToCanvas }, { "dotWithNormal", "(FFF)F", (void*)Camera_dotWithNormal } Loading
graphics/java/android/graphics/Camera.java +98 −4 Original line number Diff line number Diff line Loading @@ -16,24 +16,115 @@ package android.graphics; /** * A camera instance can be used to compute 3D transformations and * generate a matrix that can be applied, for instance, on a * {@link Canvas}. */ public class Camera { /** * Creates a new camera, with empty transformations. */ public Camera() { nativeConstructor(); } /** * Saves the camera state. Each save should be balanced * with a call to {@link #restore()}. * * @see #save() */ public native void save(); /** * Restores the saved state, if any. * * @see #restore() */ public native void restore(); /** * Applies a translation transform on all three axis. * * @param x The distance to translate by on the X axis * @param y The distance to translate by on the Y axis * @param z The distance to translate by on the Z axis */ public native void translate(float x, float y, float z); /** * Applies a rotation transform around the X axis. * * @param deg The angle of rotation around the X axis, in degrees * * @see #rotateY(float) * @see #rotateZ(float) * @see #rotate(float, float, float) */ public native void rotateX(float deg); /** * Applies a rotation transform around the Y axis. * * @param deg The angle of rotation around the Y axis, in degrees * * @see #rotateX(float) * @see #rotateZ(float) * @see #rotate(float, float, float) */ public native void rotateY(float deg); /** * Applies a rotation transform around the Z axis. * * @param deg The angle of rotation around the Z axis, in degrees * * @see #rotateX(float) * @see #rotateY(float) * @see #rotate(float, float, float) */ public native void rotateZ(float deg); /** * Applies a rotation transform around all three axis. * * @param x The angle of rotation around the X axis, in degrees * @param y The angle of rotation around the Y axis, in degrees * @param z The angle of rotation around the Z axis, in degrees * * @see #rotateX(float) * @see #rotateY(float) * @see #rotateZ(float) */ public native void rotate(float x, float y, float z); /** * Sets the location of the camera. The default location is set at * 0, 0, -8. * * @param x The x location of the camera * @param y The y location of the camera * @param z The z location of the camera */ public native void setLocation(float x, float y, float z); /** * Computes the matrix corresponding to the current transformation * and copies it to the supplied matrix object. * * @param matrix The matrix to copy the current transforms into */ public void getMatrix(Matrix matrix) { nativeGetMatrix(matrix.native_instance); } /** * Computes the matrix corresponding to the current transformation * and applies it to the specified Canvas. * * @param canvas The Canvas to set the transform matrix onto */ public void applyToCanvas(Canvas canvas) { nativeApplyToCanvas(canvas.mNativeCanvas); } Loading @@ -41,7 +132,11 @@ public class Camera { public native float dotWithNormal(float dx, float dy, float dz); protected void finalize() throws Throwable { try { nativeDestructor(); } finally { super.finalize(); } } private native void nativeConstructor(); Loading @@ -51,4 +146,3 @@ public class Camera { int native_instance; }
tests/HwAccelerationTest/AndroidManifest.xml +10 −0 Original line number Diff line number Diff line Loading @@ -396,6 +396,16 @@ </intent-filter> </activity> <activity android:name="Animated3dActivity" android:label="_Animated 3d" android:theme="@android:style/Theme.Translucent.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="SimplePathsActivity" android:label="_SimplePaths"> Loading