First version of FXGTools.  Has support for:
a) Converting an FXG file containing a Library of symbols (created in Adobe 
Illustrator) into individual FXG files
b) Optimize i.e. clean up the FXG generated by tools like AI, Photoshop, etc. 
by removing the unnecessary Group nodes.


Project: http://git-wip-us.apache.org/repos/asf/flex-utilities/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-utilities/commit/2bc81a26
Tree: http://git-wip-us.apache.org/repos/asf/flex-utilities/tree/2bc81a26
Diff: http://git-wip-us.apache.org/repos/asf/flex-utilities/diff/2bc81a26

Branch: refs/heads/master
Commit: 2bc81a26a26bfdcbaa637fb8d43337e31c8bc5b9
Parents: c75937a
Author: Om <[email protected]>
Authored: Wed Jul 31 02:17:48 2013 -0700
Committer: Om <[email protected]>
Committed: Wed Jul 31 02:17:48 2013 -0700

----------------------------------------------------------------------
 FXGTools/src/WriteFXG-app.xml        | 233 ++++++++++++++++++++++++++++++
 FXGTools/src/WriteFXG.mxml           | 214 +++++++++++++++++++++++++++
 FXGTools/src/test/BoxDividerSkin.fxg |  41 ++++++
 FXGTools/src/test/BusyCursor.fxg     |  69 +++++++++
 4 files changed, 557 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/2bc81a26/FXGTools/src/WriteFXG-app.xml
----------------------------------------------------------------------
diff --git a/FXGTools/src/WriteFXG-app.xml b/FXGTools/src/WriteFXG-app.xml
new file mode 100644
index 0000000..e9f444b
--- /dev/null
+++ b/FXGTools/src/WriteFXG-app.xml
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<application xmlns="http://ns.adobe.com/air/application/3.8";>
+
+<!-- Adobe AIR Application Descriptor File Template.
+
+       Specifies parameters for identifying, installing, and launching AIR 
applications.
+
+       xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/3.8
+                       The last segment of the namespace specifies the version 
+                       of the AIR runtime required for this application to run.
+                       
+       minimumPatchLevel - The minimum patch level of the AIR runtime required 
to run 
+                       the application. Optional.
+-->
+
+       <!-- A universally unique application identifier. Must be unique across 
all AIR applications.
+       Using a reverse DNS-style name as the id is recommended. (Eg. 
com.example.ExampleApplication.) Required. -->
+       <id>WriteFXG</id>
+
+       <!-- Used as the filename for the application. Required. -->
+       <filename>WriteFXG</filename>
+
+       <!-- The name that is displayed in the AIR application installer. 
+       May have multiple values for each language. See samples or xsd schema 
file. Optional. -->
+       <name>WriteFXG</name>
+       
+       <!-- A string value of the format <0-999>.<0-999>.<0-999> that 
represents application version which can be used to check for application 
upgrade. 
+       Values can also be 1-part or 2-part. It is not necessary to have a 
3-part value.
+       An updated version of application must have a versionNumber value 
higher than the previous version. Required for namespace >= 2.5 . -->
+       <versionNumber>1.0.0</versionNumber>
+                        
+       <!-- A string value (such as "v1", "2.5", or "Alpha 1") that represents 
the version of the application, as it should be shown to users. Optional. -->
+       <!-- <versionLabel></versionLabel> -->
+
+       <!-- Description, displayed in the AIR application installer.
+       May have multiple values for each language. See samples or xsd schema 
file. Optional. -->
+       <!-- <description></description> -->
+
+       <!-- Copyright information. Optional -->
+       <!-- <copyright></copyright> -->
+
+       <!-- Publisher ID. Used if you're updating an application created prior 
to 1.5.3 -->
+       <!-- <publisherID></publisherID> -->
+
+       <!-- Settings for the application's initial window. Required. -->
+       <initialWindow>
+               <!-- The main SWF or HTML file of the application. Required. -->
+               <!-- Note: In Flash Builder, the SWF reference is set 
automatically. -->
+               <content>[This value will be overwritten by Flash Builder in 
the output app.xml]</content>
+               
+               <!-- The title of the main window. Optional. -->
+               <!-- <title></title> -->
+
+               <!-- The type of system chrome to use (either "standard" or 
"none"). Optional. Default standard. -->
+               <!-- <systemChrome></systemChrome> -->
+
+               <!-- Whether the window is transparent. Only applicable when 
systemChrome is none. Optional. Default false. -->
+               <!-- <transparent></transparent> -->
+
+               <!-- Whether the window is initially visible. Optional. Default 
false. -->
+               <!-- <visible></visible> -->
+
+               <!-- Whether the user can minimize the window. Optional. 
Default true. -->
+               <!-- <minimizable></minimizable> -->
+
+               <!-- Whether the user can maximize the window. Optional. 
Default true. -->
+               <!-- <maximizable></maximizable> -->
+
+               <!-- Whether the user can resize the window. Optional. Default 
true. -->
+               <!-- <resizable></resizable> -->
+
+               <!-- The window's initial width in pixels. Optional. -->
+               <!-- <width></width> -->
+
+               <!-- The window's initial height in pixels. Optional. -->
+               <!-- <height></height> -->
+
+               <!-- The window's initial x position. Optional. -->
+               <!-- <x></x> -->
+
+               <!-- The window's initial y position. Optional. -->
+               <!-- <y></y> -->
+
+               <!-- The window's minimum size, specified as a width/height 
pair in pixels, such as "400 200". Optional. -->
+               <!-- <minSize></minSize> -->
+
+               <!-- The window's initial maximum size, specified as a 
width/height pair in pixels, such as "1600 1200". Optional. -->
+               <!-- <maxSize></maxSize> -->
+
+        <!-- The initial aspect ratio of the app when launched (either 
"portrait" or "landscape"). Optional. Mobile only. Default is the natural 
orientation of the device -->
+
+        <!-- <aspectRatio></aspectRatio> -->
+
+        <!-- Whether the app will begin auto-orienting on launch. Optional. 
Mobile only. Default false -->
+
+        <!-- <autoOrients></autoOrients> -->
+
+        <!-- Whether the app launches in full screen. Optional. Mobile only. 
Default false -->
+
+        <!-- <fullScreen></fullScreen> -->
+
+        <!-- The render mode for the app (either auto, cpu, gpu, or direct). 
Optional. Default auto -->
+
+        <!-- <renderMode></renderMode> -->
+
+               <!-- Whether or not to pan when a soft keyboard is raised or 
lowered (either "pan" or "none").  Optional.  Defaults "pan." -->
+               <!-- <softKeyboardBehavior></softKeyboardBehavior> -->
+       <autoOrients>true</autoOrients>
+        <fullScreen>false</fullScreen>
+        <visible>false</visible>
+        <softKeyboardBehavior>none</softKeyboardBehavior>
+    </initialWindow>
+
+       <!-- We recommend omitting the supportedProfiles element, -->
+       <!-- which in turn permits your application to be deployed to all -->
+       <!-- devices supported by AIR. If you wish to restrict deployment -->
+       <!-- (i.e., to only mobile devices) then add this element and list -->
+       <!-- only the profiles which your application does support. -->
+       <!-- <supportedProfiles>desktop extendedDesktop mobileDevice 
extendedMobileDevice</supportedProfiles> -->
+
+       <!-- The subpath of the standard default installation location to use. 
Optional. -->
+       <!-- <installFolder></installFolder> -->
+
+       <!-- The subpath of the Programs menu to use. (Ignored on operating 
systems without a Programs menu.) Optional. -->
+       <!-- <programMenuFolder></programMenuFolder> -->
+
+       <!-- The icon the system uses for the application. For at least one 
resolution,
+       specify the path to a PNG file included in the AIR package. Optional. 
-->
+       <!-- <icon>
+               <image16x16></image16x16>
+               <image32x32></image32x32>
+               <image36x36></image36x36>
+               <image48x48></image48x48>
+               <image57x57></image57x57>
+               <image72x72></image72x72>
+               <image114x114></image114x114>
+               <image128x128></image128x128>
+       </icon> -->
+
+       <!-- Whether the application handles the update when a user 
double-clicks an update version
+       of the AIR file (true), or the default AIR application installer 
handles the update (false).
+       Optional. Default false. -->
+       <!-- <customUpdateUI></customUpdateUI> -->
+       
+       <!-- Whether the application can be launched when the user clicks a 
link in a web browser.
+       Optional. Default false. -->
+       <!-- <allowBrowserInvocation></allowBrowserInvocation> -->
+
+       <!-- Listing of file types for which the application can register. 
Optional. -->
+       <!-- <fileTypes> -->
+
+               <!-- Defines one file type. Optional. -->
+               <!-- <fileType> -->
+
+                       <!-- The name that the system displays for the 
registered file type. Required. -->
+                       <!-- <name></name> -->
+
+                       <!-- The extension to register. Required. -->
+                       <!-- <extension></extension> -->
+                       
+                       <!-- The description of the file type. Optional. -->
+                       <!-- <description></description> -->
+                       
+                       <!-- The MIME content type. -->
+                       <!-- <contentType></contentType> -->
+                       
+                       <!-- The icon to display for the file type. Optional. 
-->
+                       <!-- <icon>
+                               <image16x16></image16x16>
+                               <image32x32></image32x32>
+                               <image48x48></image48x48>
+                               <image128x128></image128x128>
+                       </icon> -->
+                       
+               <!-- </fileType> -->
+       <!-- </fileTypes> -->
+
+    <!-- iOS specific capabilities -->
+       <!-- <iPhone> -->
+               <!-- A list of plist key/value pairs to be added to the 
application Info.plist -->
+               <!-- <InfoAdditions>
+            <![CDATA[
+                <key>UIDeviceFamily</key>
+                <array>
+                    <string>1</string>
+                    <string>2</string>
+                </array>
+                <key>UIStatusBarStyle</key>
+                <string>UIStatusBarStyleBlackOpaque</string>
+                <key>UIRequiresPersistentWiFi</key>
+                <string>YES</string>
+            ]]>
+        </InfoAdditions> -->
+        <!-- A list of plist key/value pairs to be added to the application 
Entitlements.plist -->
+               <!-- <Entitlements>
+            <![CDATA[
+                <key>keychain-access-groups</key>
+                <array>
+                    <string></string>
+                    <string></string>
+                </array>
+            ]]>
+        </Entitlements> -->
+       <!-- Display Resolution for the app (either "standard" or "high"). 
Optional. Default "standard" -->
+       <!-- <requestedDisplayResolution></requestedDisplayResolution> -->
+       <!-- </iPhone> -->
+
+       <!-- Specify Android specific tags that get passed to 
AndroidManifest.xml file. -->
+    <!--<android> -->
+    <!--       <manifestAdditions>
+               <![CDATA[
+                       <manifest android:installLocation="auto">
+                               <uses-permission 
android:name="android.permission.INTERNET"/>
+                               <uses-permission 
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+                               <uses-permission 
android:name="android.permission.ACCESS_FINE_LOCATION"/>
+                               <uses-feature android:required="true" 
android:name="android.hardware.touchscreen.multitouch"/>
+                               <application android:enabled="true">
+                                       <activity 
android:excludeFromRecents="false">
+                                               <intent-filter>
+                                                       <action 
android:name="android.intent.action.MAIN"/>
+                                                       <category 
android:name="android.intent.category.LAUNCHER"/>
+                                               </intent-filter>
+                                       </activity>
+                               </application>
+            </manifest>
+               ]]>
+        </manifestAdditions> -->
+           <!-- Color depth for the app (either "32bit" or "16bit"). Optional. 
Default 16bit before namespace 3.0, 32bit after -->
+        <!-- <colorDepth></colorDepth> -->
+    <!-- </android> -->
+       <!-- End of the schema for adding the android specific tags in 
AndroidManifest.xml file -->
+
+</application>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/2bc81a26/FXGTools/src/WriteFXG.mxml
----------------------------------------------------------------------
diff --git a/FXGTools/src/WriteFXG.mxml b/FXGTools/src/WriteFXG.mxml
new file mode 100644
index 0000000..621e6e2
--- /dev/null
+++ b/FXGTools/src/WriteFXG.mxml
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+
+-->
+<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"; 
+                                          
xmlns:s="library://ns.adobe.com/flex/spark" 
+                                          
xmlns:mx="library://ns.adobe.com/flex/mx" 
creationComplete="windowedapplication1_creationCompleteHandler(event)">
+       <fx:Script>
+               <![CDATA[
+                       import mx.events.FlexEvent;
+                       
+                       private var sourceFile:File = new File();               
        
+                       private var sourcePath:String;
+                       private var sourceDir:String;
+                       private var slash:String;
+                       private var sourceStream:FileStream;
+                       private var sourceString:String;
+                       private var sourceXML:XML;
+                       private var xml1:XML = <afx:foo 
xmlns:afx="http://ns.apache.org/flex/2012"; />;
+                       private var afxns:Namespace = xml1.namespace();
+                       private var xml2:XML = <flm:foo 
xmlns:flm="http://ns.adobe.com/flame/2008"; />;
+                       private var flmns:Namespace = xml2.namespace();
+                       private var fxgns:Namespace = new 
Namespace("http://ns.adobe.com/fxg/2008";);
+                       private var originalNameQName:QName = new QName(flmns, 
"originalName");
+                       
+                       protected function 
windowedapplication1_creationCompleteHandler(event:FlexEvent):void
+                       {
+                               XML.ignoreComments = false;
+                               XML.prettyPrinting = true;
+                       }
+                       
+                       private function browse():void
+                       {
+                               var fxgFilter:FileFilter = new 
FileFilter("FXG", "*.fxg");
+                               sourceFile.browseForOpen("Select FXG file", 
[fxgFilter]);
+                               sourceFile.addEventListener(Event.SELECT, 
fileSelected);
+                       }
+                       
+                       private function fileSelected(event:Event):void
+                       {
+                               sourceFileTI.text = sourceFile.nativePath;
+                       }
+                       
+                       
+                       
+                       private function readFile():void
+                       {
+                               if (Capabilities.os.indexOf("Windows") != -1)
+                                       slash = "\\";
+                               else
+                                       slash = "/";
+                               
+                               sourceFile.nativePath = sourceFileTI.text;      
+                               sourcePath = sourceFile.nativePath;
+                               var c:int = sourcePath.lastIndexOf(slash);
+                               sourceDir = sourcePath.substring(0, c);
+                               
+                               sourceStream = new FileStream();
+                               sourceStream.open(sourceFile, FileMode.READ);
+                               sourceString = 
sourceStream.readUTFBytes(sourceStream.bytesAvailable);
+                               
+                               sourceXML = XML(sourceString);
+                       }
+                       
+                       private function writeFXG():void
+                       {
+                               readFile();
+                               callLater(makeFXGFiles);
+                       }
+                       
+                       private var topTags:XMLList;
+                       private var numTags:int;
+                       private var curTag:int = 0;
+                       
+                       private var symbols:Object = {};
+                       private var symbolList:Array = [];
+                       
+                       private function makeFXGFiles():void
+                       {
+                               default xml namespace = fxgns;
+                               var topGroups:XMLList = sourceXML.Group;
+                               if (topGroups.length() > 1)
+                                       errorLabel.text = "Unexpected: More 
than one top-level group";
+                               topTags = topGroups.children();
+                               numTags = topTags.length();
+                               
+                               var syms:XMLList = sourceXML.Library.children();
+                               var n:int = syms.length();
+                               for (var i:int = 0; i < n; i++)
+                               {
+                                       var node:XML = syms[i];
+                                       symbols[node.@name] = node;
+                               }
+                               callLater(makeFXGFile);
+                       }       
+                       
+                       private function makeFXGFile():void
+                       {
+                               for each (var symbolXML:XML in symbols)
+                               {
+                                       var newFXG:XML = getNewFXG(symbolXML);
+                                       
+                                       // write out file
+                                       var destFile:File = new File(sourceDir 
+ slash + "fxg" + slash + symbolXML.@name + ".fxg");
+                                       var writeStream:FileStream = new 
FileStream();
+                                       writeStream.open(destFile, 
FileMode.WRITE);
+                                       
writeStream.writeUTFBytes(newFXG.toXMLString());
+                                       writeStream.close();
+                                       
+                               }
+                       }
+                       
+                       private function getNewFXG(v:XML):XML
+                       {
+                               var newFXG:XML = v.copy();
+                               //var newFXG:XML = new XML();
+                               var newName:String = newFXG.@name
+                               // change name from 'Definition' to 'Graphic'
+                               newFXG.setName("Graphic");
+                               newFXG.addNamespace(flmns);
+                               
+                               // delete name attribute
+                               delete newFXG.@name;
+                               
+                               // add version
+                               newFXG.@version = "2.0";
+                               for (var i:int=newFXG.children().length(); 
i>=0; i--)
+                               {
+                                       delete newFXG.child(i)[0];
+                               }
+                               return newFXG;
+                       }
+                       
+                       private function optimizeFXG():void
+                       {
+                               readFile();
+                               optimize();
+                       }
+                       
+                       private function optimize():void{
+                               var children:XMLList = sourceXML.children();
+                               var outputXML:XML = getNewFXG(sourceXML);
+                               if(children.length() == 1)
+                               {
+                                       sourceXML = simplify(children[0]);
+                               }
+                               else
+                               {
+                                       for each (var child:XML in children)
+                                       {
+                                               if(child.localName() != 
"Private")
+                                               {
+                                                       
outputXML.appendChild(simplify(child)); 
+                                               }
+                                       }
+                               }
+                               // write out file
+                               var destFile:File = new File(sourceDir + slash 
+ "fxg" + slash + sourceFile.name);
+                               var writeStream:FileStream = new FileStream();
+                               writeStream.open(destFile, FileMode.WRITE);
+                               
writeStream.writeUTFBytes(outputXML.toXMLString());
+                               writeStream.close();
+                               
+                       }
+                       
+                       private function simplify(v:XML):XML
+                       {
+                               if(v.localName() == "Group")
+                               {
+                                       if(v.children().length() == 1)
+                                       {
+                                               return 
simplify(v.children()[0]);
+                                       }
+                                       else
+                                       {
+                                               return v;
+                                       }
+                               }
+                               else
+                               {
+                                       return v;
+                               }
+                       }
+                       
+               ]]>
+       </fx:Script>
+       <s:VGroup width="100%" >
+               <s:HGroup width="100%">
+                       <s:Label text="Source File:" />
+                       <s:TextInput id="sourceFileTI" width="100%" />
+                       <s:Button label="Browse..." click="browse()" />
+               </s:HGroup>
+               <s:HGroup width="100%">
+                       <s:Button label="Write Library to FXGs" 
click="writeFXG()" />
+                       <s:Button label="Optimize FXG" click="optimizeFXG()" />
+               </s:HGroup>
+               <s:Label id="errorLabel" />             
+       </s:VGroup>
+</s:WindowedApplication>

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/2bc81a26/FXGTools/src/test/BoxDividerSkin.fxg
----------------------------------------------------------------------
diff --git a/FXGTools/src/test/BoxDividerSkin.fxg 
b/FXGTools/src/test/BoxDividerSkin.fxg
new file mode 100644
index 0000000..40e563f
--- /dev/null
+++ b/FXGTools/src/test/BoxDividerSkin.fxg
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+
+-->
+<Graphic version="2.0" ATE:version="1.0.0" flm:version="1.0.0" d:using="" 
+       xmlns="http://ns.adobe.com/fxg/2008"; 
xmlns:ATE="http://ns.adobe.com/ate/2009"; 
xmlns:d="http://ns.adobe.com/fxg/2008/dt"; 
+       xmlns:flm="http://ns.adobe.com/flame/2008";
+       xmlns:afx="http://ns.apache.org/flex/2012"; 
afx:className="mx.skins.BoxDividerSkin" 
afx:baseClassName="flash.display.Sprite" >
+        <Group d:type="layer" d:userLabel="Layer 1">
+          <Group>
+            <Path data="M16 4 0 4 0 3 16 3 16 4M16 6 0 6 0 5 16 5 16 6M16 2 0 
2 0 1 16 1 16 2">
+              <fill>
+                <SolidColor alpha="0.35294119"/>
+              </fill>
+            </Path>
+          </Group>
+          <Group>
+            <Path scaleX="1.5999908" x="-94.4" y="-50" data="M69 51 59 51 59 
50 69 50 69 51M69 53 59 53 59 52 69 52 69 53M69 55 59 55 59 54 69 54 69 55">
+              <fill>
+                <SolidColor color="#EEEEEE"/>
+              </fill>
+            </Path>
+          </Group>
+        </Group>
+  <Private/>
+</Graphic>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-utilities/blob/2bc81a26/FXGTools/src/test/BusyCursor.fxg
----------------------------------------------------------------------
diff --git a/FXGTools/src/test/BusyCursor.fxg b/FXGTools/src/test/BusyCursor.fxg
new file mode 100644
index 0000000..f28e780
--- /dev/null
+++ b/FXGTools/src/test/BusyCursor.fxg
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+
+-->
+<Graphic version="2.0" ATE:version="1.0.0" flm:version="1.0.0" d:using="" 
+       xmlns="http://ns.adobe.com/fxg/2008"; 
xmlns:ATE="http://ns.adobe.com/ate/2009"; 
xmlns:d="http://ns.adobe.com/fxg/2008/dt"; 
+       xmlns:flm="http://ns.adobe.com/flame/2008";
+       xmlns:afx="http://ns.apache.org/flex/2012"; 
afx:className="mx.skins.cursor.BusyCursor" 
afx:baseClassName="flash.display.Sprite" >
+        <Group d:type="layer" d:userLabel="shadow">
+          <Group>
+            <Path x="-7.5" y="-8" data="M17 8Q17.001367 5.6310547 15.925 3.7 
17.50625 6.0105469 17.5 8.975 17.508398 12.927539 14.725 15.7 11.952344 
18.483594 8 18.475 4.0492187 18.483594 1.25 15.7 -1.5068359 12.927539 -1.5 
8.975 -1.5052734 5.9703125 0.1 3.625 -0.99511719 5.5927734
+ -1 8 -0.99257812 11.737305 1.625 14.35 4.2722656 17.002148 8 17 11.737305 
17.002148 14.35 14.35 17.002148 11.737305 17 8">
+              <fill>
+                <RadialGradient x="8" y="9" scaleX="19.525" scaleY="19.525">
+                  <GradientEntry ratio="0.78431373" alpha="0.4"/>
+                  <GradientEntry ratio="1" alpha="0"/>
+                </RadialGradient>
+              </fill>
+            </Path>
+          </Group>
+        </Group>
+        <Group d:type="layer" d:userLabel="outline">
+          <Group>
+            <Path x="-7.5" y="-8" data="M17 8Q17.002148 11.737305 14.35 14.35 
11.737305 17.002148 8 17 4.2722656 17.002148 1.625 14.35 -0.99257812 11.737305 
-1 8 -0.99257812 4.2722656 1.625 1.625 4.2722656 -0.99257812 8 -1 11.737305 
-0.99257812 14.35 1.625 17.002148 4.2722656 17 8">
+              <fill>
+                <SolidColor color="#FFFFFF" alpha="0.50196081"/>
+              </fill>
+            </Path>
+          </Group>
+        </Group>
+        <Group d:type="layer" d:userLabel="border">
+          <Group>
+            <Path x="-7.5" y="-8" data="M0 8Q0 4.65 2.35 2.35 4.65 0 8 0 11.3 
0 13.65 2.35 16 4.65 16 8 16 11.3 13.65 13.65 11.3 16 8 16 4.65 16 2.35 13.65 0 
11.3 0 8">
+              <fill>
+                <LinearGradient x="8" y="0" scaleX="16" rotation="90">
+                  <GradientEntry ratio="0" color="#6F7777"/>
+                  <GradientEntry ratio="1" color="#2B3C3C"/>
+                </LinearGradient>
+              </fill>
+            </Path>
+          </Group>
+        </Group>
+        <Group d:type="layer" d:userLabel="background">
+          <Group>
+            <Path scaleX="0.85714722" scaleY="0.85714722" x="-6.45" y="-6.9" 
data="M15.075 8.025Q15.083203 10.949805 13.05 13 10.999805 15.033203 8.075 
15.025 5.1623047 15.033203 3.125 13 1.0791016 10.949805 1.075 8.025 1.0791016 
5.1123047 3.125 3.075 5.1623047 1.0291016 8.075 1.025 10.999805 1.0291016 13.05 
3.075 15.083203
+ 5.1123047 15.075 8.025">
+              <fill>
+                <SolidColor color="#FFFFFF"/>
+              </fill>
+            </Path>
+          </Group>
+        </Group>
+  <Private/>
+</Graphic>
\ No newline at end of file

Reply via email to