<?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.

-->


<!--- The Spark skin class for the disabled radio icon of the MX Menu component. 

      @see mx.controls.Menu

@langversion 3.0
@playerversion Flash 10
@playerversion AIR 1.5
@productversion Flex 4
-->
<s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" 
    alpha=".5">

    <fx:Script>
        /* Define the symbol fill items that should be colored by the "symbolColor" style. */
        static private const symbols:Array = ["radioFill"];
        /**
         * @private
         */
        override public function get symbolItems():Array {return symbols};
    </fx:Script>
    
    <!--- @private -->
    <s:Ellipse id="radio" width="5" height="5">
        <s:fill>
            <!--- @private -->
            <s:SolidColor color="0" id="radioFill"/>
        </s:fill>
    </s:Ellipse>
</s:SparkSkin>

