Loading core/java/android/util/PathParser.java +19 −6 Original line number Diff line number Diff line Loading @@ -280,7 +280,7 @@ public class PathParser { * @param path The target Path object. */ public static void nodesToPath(PathDataNode[] node, Path path) { float[] current = new float[4]; float[] current = new float[6]; char previousCommand = 'm'; for (int i = 0; i < node.length; i++) { addCommand(path, current, previousCommand, node[i].mType, node[i].mParams); Loading Loading @@ -313,6 +313,8 @@ public class PathParser { float currentY = current[1]; float ctrlPointX = current[2]; float ctrlPointY = current[3]; float currentSegmentStartX = current[4]; float currentSegmentStartY = current[5]; float reflectiveCtrlPointX; float reflectiveCtrlPointY; Loading @@ -320,7 +322,15 @@ public class PathParser { case 'z': case 'Z': path.close(); return; // Path is closed here, but we need to move the pen to the // closed position. So we cache the segment's starting position, // and restore it here. currentX = currentSegmentStartX; currentY = currentSegmentStartY; ctrlPointX = currentSegmentStartX; ctrlPointY = currentSegmentStartY; path.moveTo(currentX, currentY); break; case 'm': case 'M': case 'l': Loading Loading @@ -350,17 +360,22 @@ public class PathParser { incr = 7; break; } for (int k = 0; k < val.length; k += incr) { switch (cmd) { case 'm': // moveto - Start a new sub-path (relative) path.rMoveTo(val[k + 0], val[k + 1]); currentX += val[k + 0]; currentY += val[k + 1]; currentSegmentStartX = currentX; currentSegmentStartY = currentY; break; case 'M': // moveto - Start a new sub-path path.moveTo(val[k + 0], val[k + 1]); currentX = val[k + 0]; currentY = val[k + 1]; currentSegmentStartX = currentX; currentSegmentStartY = currentY; break; case 'l': // lineto - Draw a line from the current point (relative) path.rLineTo(val[k + 0], val[k + 1]); Loading @@ -372,10 +387,6 @@ public class PathParser { currentX = val[k + 0]; currentY = val[k + 1]; break; case 'z': // closepath - Close the current subpath case 'Z': // closepath - Close the current subpath path.close(); break; case 'h': // horizontal lineto - Draws a horizontal line (relative) path.rLineTo(val[k + 0], 0); currentX += val[k + 0]; Loading Loading @@ -526,6 +537,8 @@ public class PathParser { current[1] = currentY; current[2] = ctrlPointX; current[3] = ctrlPointY; current[4] = currentSegmentStartX; current[5] = currentSegmentStartY; } private static void drawArc(Path p, Loading tests/VectorDrawableTest/res/drawable/vector_drawable30.xml 0 → 100644 +28 −0 Original line number Diff line number Diff line <!-- Copyright (C) 2014 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. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="48dp" android:width="48dp" android:viewportHeight="48" android:viewportWidth="48" > <group> <path android:name="plus1" android:pathData="M20 16h-4v8h-8v4h8v8h4v-8h8v-4h-8zm9-3.84v3.64l5-1v21.2h4v-26z" android:fillColor="#ff00ff00"/> </group> </vector> tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawablePerformance.java +1 −0 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ public class VectorDrawablePerformance extends Activity { R.drawable.vector_drawable27, R.drawable.vector_drawable28, R.drawable.vector_drawable29, R.drawable.vector_drawable30, }; @Override Loading Loading
core/java/android/util/PathParser.java +19 −6 Original line number Diff line number Diff line Loading @@ -280,7 +280,7 @@ public class PathParser { * @param path The target Path object. */ public static void nodesToPath(PathDataNode[] node, Path path) { float[] current = new float[4]; float[] current = new float[6]; char previousCommand = 'm'; for (int i = 0; i < node.length; i++) { addCommand(path, current, previousCommand, node[i].mType, node[i].mParams); Loading Loading @@ -313,6 +313,8 @@ public class PathParser { float currentY = current[1]; float ctrlPointX = current[2]; float ctrlPointY = current[3]; float currentSegmentStartX = current[4]; float currentSegmentStartY = current[5]; float reflectiveCtrlPointX; float reflectiveCtrlPointY; Loading @@ -320,7 +322,15 @@ public class PathParser { case 'z': case 'Z': path.close(); return; // Path is closed here, but we need to move the pen to the // closed position. So we cache the segment's starting position, // and restore it here. currentX = currentSegmentStartX; currentY = currentSegmentStartY; ctrlPointX = currentSegmentStartX; ctrlPointY = currentSegmentStartY; path.moveTo(currentX, currentY); break; case 'm': case 'M': case 'l': Loading Loading @@ -350,17 +360,22 @@ public class PathParser { incr = 7; break; } for (int k = 0; k < val.length; k += incr) { switch (cmd) { case 'm': // moveto - Start a new sub-path (relative) path.rMoveTo(val[k + 0], val[k + 1]); currentX += val[k + 0]; currentY += val[k + 1]; currentSegmentStartX = currentX; currentSegmentStartY = currentY; break; case 'M': // moveto - Start a new sub-path path.moveTo(val[k + 0], val[k + 1]); currentX = val[k + 0]; currentY = val[k + 1]; currentSegmentStartX = currentX; currentSegmentStartY = currentY; break; case 'l': // lineto - Draw a line from the current point (relative) path.rLineTo(val[k + 0], val[k + 1]); Loading @@ -372,10 +387,6 @@ public class PathParser { currentX = val[k + 0]; currentY = val[k + 1]; break; case 'z': // closepath - Close the current subpath case 'Z': // closepath - Close the current subpath path.close(); break; case 'h': // horizontal lineto - Draws a horizontal line (relative) path.rLineTo(val[k + 0], 0); currentX += val[k + 0]; Loading Loading @@ -526,6 +537,8 @@ public class PathParser { current[1] = currentY; current[2] = ctrlPointX; current[3] = ctrlPointY; current[4] = currentSegmentStartX; current[5] = currentSegmentStartY; } private static void drawArc(Path p, Loading
tests/VectorDrawableTest/res/drawable/vector_drawable30.xml 0 → 100644 +28 −0 Original line number Diff line number Diff line <!-- Copyright (C) 2014 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. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="48dp" android:width="48dp" android:viewportHeight="48" android:viewportWidth="48" > <group> <path android:name="plus1" android:pathData="M20 16h-4v8h-8v4h8v8h4v-8h8v-4h-8zm9-3.84v3.64l5-1v21.2h4v-26z" android:fillColor="#ff00ff00"/> </group> </vector>
tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawablePerformance.java +1 −0 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ public class VectorDrawablePerformance extends Activity { R.drawable.vector_drawable27, R.drawable.vector_drawable28, R.drawable.vector_drawable29, R.drawable.vector_drawable30, }; @Override Loading