<?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:Application 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="loadFontModule()"
		width="800" height="600">
	<fx:Script>
	<![CDATA[

		import spark.layouts.*;
		import mx.core.UIComponent;

		import mx.core.UIFTETextField;
		import mx.modules.IModuleInfo;
		import mx.modules.ModuleManager;
		import mx.events.ModuleEvent;
		import flash.events.MouseEvent;

		private var dp:Array = [{ first: 'Main', last: 'App'}, {first: 'Loads', last: 'Modules' }];
		
		private var fontModuleInfo:IModuleInfo;

		private function loadFontModule():void
		{
			fontModuleInfo = ModuleManager.getModule("assets/TLFEmbedTestFontModule.swf");
			fontModuleInfo.addEventListener(ModuleEvent.READY, readyHandler);
			fontModuleInfo.load();
		}

		private function readyHandler(event:Event):void
		{
			fontModuleInfo.factory.create();
		}

	]]>
	</fx:Script>	    	
<fx:Style>
 	@namespace mx "library://ns.adobe.com/flex/mx";
	@namespace s "library://ns.adobe.com/flex/spark";	
		
		@font-face{
			src: url("../../../../Assets/Fonts/Open_Sans/OpenSans-Regular.ttf");
			fontFamily: myVeraSpark;
			embedAsCFF: true;
		}
		@font-face{
			src: url("../../../../Assets/Fonts/Open_Sans/OpenSans-Bold.ttf");
			fontWeight: bold;
			fontFamily: myVeraSpark;
			embedAsCFF: true;
		}

		@font-face{
			src: url("../../../../Assets/Fonts/Open_Sans/OpenSans-Italic.ttf");
			fontStyle: italic;
			fontFamily: myVeraSpark;
			embedAsCFF: true;
		}
		@font-face{
			src: url("../../../../Assets/Fonts/Open_Sans/OpenSans-BoldItalic.ttf");
			fontWeight: bold;
    			fontStyle: italic;
			fontFamily: myVeraSpark;
			embedAsCFF: true;
		}
	
		global {
		    fontFamily: "myVeraSpark";
		    fontAntiAliasType: "normal";
		}

	 	
</fx:Style>	

	<s:layout> <s:VerticalLayout/> </s:layout>

	<s:Button id="changeFonts" label="Change Font" click="pnl.setStyle('fontFamily', 'myCourier')"/>
	<s:Panel id="pnl" title="Gumbo Main Panel" height="300"  rotation="-10">
	<s:layout> <s:VerticalLayout/> </s:layout>
	<s:TextArea id="gumbo_textArea" height="40" />
	<s:Button id="gumbo_button" label="gumbo button" />
	<mx:Button id="halo_button" label="halo button" textFieldClass="mx.core.UIFTETextField" />

	<mx:DataGrid id="dg" initialize="dg.dataProvider=dp"  textFieldClass="mx.core.UIFTETextField" itemRenderer="mx.controls.dataGridClasses.FTEDataGridItemRenderer" height="80"/>

	</s:Panel>
</s:Application>