You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ha...@apache.org on 2017/06/26 21:29:21 UTC

git commit: [flex-asjs] [refs/heads/tlf] - Selection blendModes are working Copy and Paste For Copy and Paste to work, a focused, editable element needs to be assigned to the Clipboard.

Repository: flex-asjs
Updated Branches:
  refs/heads/tlf 99864a8cd -> 455f88020


Selection blendModes are working
Copy and Paste
For Copy and Paste to work, a focused, editable element needs to be assigned to the Clipboard.


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/455f8802
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/455f8802
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/455f8802

Branch: refs/heads/tlf
Commit: 455f880202bb37c3052be321a10f5ceca15ad27c
Parents: 99864a8
Author: Harbs <ha...@in-tools.com>
Authored: Tue Jun 27 00:29:17 2017 +0300
Committer: Harbs <ha...@in-tools.com>
Committed: Tue Jun 27 00:29:17 2017 +0300

----------------------------------------------------------------------
 .../projects/TLF/src/main/flex/TLFClasses.as    |   2 +-
 .../textLayout/container/ContainerController.as |  18 +-
 .../textLayout/conversion/PlainTextImporter.as  |   2 +-
 .../apache/flex/textLayout/dummy/Clipboard.as   |  36 ----
 .../apache/flex/textLayout/edit/Clipboard.as    | 211 +++++++++++++++++++
 .../apache/flex/textLayout/edit/EditManager.as  |  20 ++
 .../flex/textLayout/edit/SelectionManager.as    |  28 ++-
 .../flex/textLayout/edit/TextClipboard.as       |  41 +++-
 .../flex/textLayout/factory/ITLFFactory.as      |   2 +
 .../textLayout/factory/StandardTLFFactory.as    |   9 +
 10 files changed, 317 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/455f8802/frameworks/projects/TLF/src/main/flex/TLFClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/TLFClasses.as b/frameworks/projects/TLF/src/main/flex/TLFClasses.as
index e398e7c..29f9d14 100644
--- a/frameworks/projects/TLF/src/main/flex/TLFClasses.as
+++ b/frameworks/projects/TLF/src/main/flex/TLFClasses.as
@@ -164,7 +164,7 @@ package
 		import org.apache.flex.textLayout.utils.HitTestArea; HitTestArea;
 		import org.apache.flex.textLayout.utils.Twips; Twips;
 		import org.apache.flex.textLayout.factory.ITLFFactory; ITLFFactory;
-		
+		import org.apache.flex.textLayout.edit.Clipboard; Clipboard;
 		// CONFIG::release public function exportAssert():void
 		// {
 		// 	assert();

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/455f8802/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/ContainerController.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/ContainerController.as b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/ContainerController.as
index 03a68c8..1bf69cb 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/ContainerController.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/ContainerController.as
@@ -3002,10 +3002,10 @@ package org.apache.flex.textLayout.container
 			}
 			
 			var selFormat:SelectionFormat = interactionManager.currentSelectionFormat;
-//TODO deal with blend modes
-//			var curBlendMode:String = (interactionManager.activePosition == interactionManager.anchorPosition) ? selFormat.pointBlendMode : selFormat.rangeBlendMode;
-//			if (selectionSprite.blendMode != curBlendMode)
-//				selectionSprite.blendMode = curBlendMode;
+			var curBlendMode:String = (interactionManager.activePosition == interactionManager.anchorPosition) ? selFormat.pointBlendMode : selFormat.rangeBlendMode;
+			
+			if (textFlow.tlfFactory.getBlendMode(selectionSprite) != curBlendMode)
+				textFlow.tlfFactory.setBlendMode(selectionSprite,curBlendMode);
 			
 			var curAlpha:Number = (interactionManager.activePosition == interactionManager.anchorPosition) ? selFormat.pointAlpha : selFormat.rangeAlpha;
 			if (selectionSprite.alpha != curAlpha)
@@ -4411,14 +4411,14 @@ package org.apache.flex.textLayout.container
 		 */
 		protected function addSelectionContainer(selectionContainer:IParentIUIBase):void
 		{
-//TODO deal with blendModes
 //			if (selectionContainer.blendMode == BlendMode.NORMAL && selectionContainer.alpha == 1)
-//			{
+			if(textFlow.tlfFactory.getBlendMode(selectionContainer) == "normal")
+			{
 				// don't put selection behind background color or existing content in container, put it behind first text line
 				_container.addElementAt(selectionContainer, getFirstTextLineChildIndex());
-//			}
-//			else
-//				_container.addElement(selectionContainer);
+			}
+			else
+				_container.addElement(selectionContainer);
 		}
 		
 		/**

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/455f8802/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/conversion/PlainTextImporter.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/conversion/PlainTextImporter.as b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/conversion/PlainTextImporter.as
index b98c43d..f3ded70 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/conversion/PlainTextImporter.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/conversion/PlainTextImporter.as
@@ -38,7 +38,7 @@ package org.apache.flex.textLayout.conversion {
 	 * Newlines will be converted to paragraphs. Using the PlainTextImporter directly
 	 * is equivalent to calling TextConverter.importToFlow(TextConverter.PLAIN_TEXT_FORMAT).
 	 */
-	internal class PlainTextImporter extends ConverterBase implements ITextImporter
+	public class PlainTextImporter extends ConverterBase implements ITextImporter
 	{
 		protected var _config:IConfiguration = null;
 		

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/455f8802/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/dummy/Clipboard.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/dummy/Clipboard.as b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/dummy/Clipboard.as
deleted file mode 100644
index ca0fed1..0000000
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/dummy/Clipboard.as
+++ /dev/null
@@ -1,36 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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.
-//
-////////////////////////////////////////////////////////////////////////////////
-package org.apache.flex.textLayout.dummy {
-	public class Clipboard {
-		public static var generalClipboard : Clipboard;
-
-		public function hasFormat(format : String) : Boolean {
-			return false;
-		}
-
-		public function getData(clipboardFormat : String) : void {
-		}
-
-		public function clear() : void {
-		}
-
-		public function setData(clipboardFormat : String, clipboardData : String) : void {
-		}
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/455f8802/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/Clipboard.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/Clipboard.as b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/Clipboard.as
new file mode 100644
index 0000000..c453aa8
--- /dev/null
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/Clipboard.as
@@ -0,0 +1,211 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.textLayout.edit
+{
+    COMPILE::SWF
+    {
+        import flash.desktop.Clipboard;
+        import org.apache.flex.utils.UIDUtil;
+    }
+    COMPILE::JS
+    {
+        import org.apache.flex.textLayout.events.EditEvent;
+    }
+	/** 
+	 * The Clipboard class is used for Clipboard operations such as copy and paste
+	 * It wraps the Flash Clipboard class and creates a new one on the Javascript side.
+     * To use the Javascript version, it is necessary to assign a static `clipElement` which needs
+     * to be a `contenteditable` HTML Element. This is to work around Browser issues related to Copy and Paste.
+	 * 
+	 */
+    COMPILE::SWF
+    public class Clipboard
+    {
+        public function get clipElement():Object
+        {
+            return null;
+        }
+        public function set clipElement(value:Object):void
+        {
+            // nothing for Flash
+        }
+        private static function get systemClipboard():flash.desktop.Clipboard
+        {
+            return flash.desktop.Clipboard.generalClipboard;
+        }
+        private static var _generalClipboard:org.apache.flex.textLayout.edit.Clipboard;
+        public static function get generalClipboard():org.apache.flex.textLayout.edit.Clipboard
+        {
+            if(_generalClipboard == null)
+                _generalClipboard = new org.apache.flex.textLayout.edit.Clipboard();
+            return _generalClipboard;
+        }
+		public function hasFormat(format:String):Boolean
+        {
+			return systemClipboard.hasFormat(format);
+		}
+
+		public function getData(clipboardFormat:String):Object
+        {
+            return systemClipboard.getData(clipboardFormat);
+		}
+
+		public function clear():void
+        {
+            systemClipboard.clear();
+		}
+
+        public function clearData(format:String):void
+        {
+            systemClipboard.clearData(format);
+        }
+
+		public function setData(clipboardFormat:String, clipboardData:String):void
+        {
+            systemClipboard.setData(clipboardFormat, clipboardData);
+		}
+
+        public function setDataHandler(format:String, handler:Function, serializable:Boolean = true):Boolean
+        {
+            return systemClipboard.setDataHandler(format, handler, serializable);
+        }
+        // Do nothing in Flash
+        public function registerCallback(callback:Function):void{}
+
+    }
+
+    COMPILE::JS
+    public class Clipboard
+    {
+
+        private var _clipElement:Object;
+        public function get clipElement():Object
+        {
+            return _clipElement;
+        }
+        public function set clipElement(value:Object):void
+        {
+            if(!_clipElement)
+            {
+                document["addEventListener"]('cut',onCut);
+                document["addEventListener"]('copy',onCopy);
+                document["addEventListener"]('paste',onPaste);
+                
+            }
+            // if(_clipElement)
+            // {
+            //     _clipElement["removeEventListener"]('cut',onCut);
+            //     _clipElement["removeEventListener"]('copy',onCopy);
+            //     _clipElement["removeEventListener"]('paste',onPaste);
+            // }
+            _clipElement = value;
+            // if(_clipElement)
+            // {
+            //     _clipElement["addEventListener"]('cut',onCut);
+            //     _clipElement["addEventListener"]('copy',onCopy);
+            //     _clipElement["addEventListener"]('paste',onPaste);
+            // }
+        }
+        private var currentEvent:Object;
+        private function onCopy(e:Event):void
+        {
+            currentEvent = e;
+            if(_callback)
+                _callback(new Event(EditEvent.COPY));
+            // only call the callback once
+            _callback = null;
+        }
+        private function onCut(e:Event):void
+        {
+            currentEvent = e;
+            if(_callback)
+                _callback(new Event(EditEvent.CUT));
+            // only call the callback once
+            _callback = null;
+            
+        }
+        private function onPaste(e:Event):void
+        {
+            currentEvent = e;
+
+            // check if the paste is outside content or TLF content
+            var pasteboardText:String;
+                if(window["clipboardData"]) {//IE
+                    pasteboardText = window["clipboardData"].getData("Text");
+                } else if(currentEvent["clipboardData"]) {
+                    pasteboardText = currentEvent["clipboardData"].getData("text/plain");
+                }
+            if(pasteboardText != getData("text/plain"))
+            {
+                clear();
+                setData("text/plain",pasteboardText);
+            }
+            if(_callback)
+                _callback(new Event(EditEvent.PASTE));
+            // only call the callback once
+            _callback = null;
+            
+        }
+
+        private static var _generalClipboard:Clipboard;
+		public static function get generalClipboard():Clipboard{
+            if(_generalClipboard == null)
+                _generalClipboard = new Clipboard();
+            
+            return _generalClipboard;
+        }
+        private var _formats:Object = {};
+		public function hasFormat(format:String):Boolean {
+            return _formats[format] != null;
+		}
+
+		public function getData(clipboardFormat:String):Object
+        {
+            return _formats[clipboardFormat];
+		}
+
+		public function clear() : void {
+            _formats = {};
+		}
+		public function setData(clipboardFormat:String, clipboardData:Object) : void {
+            _formats[clipboardFormat] = clipboardData;
+            if(clipboardFormat == "text/plain")
+            {
+                if(window["clipboardData"]) {//IE
+                    window["clipboardData"].setData("Text", clipboardData);        
+                } else if(currentEvent["clipboardData"]) {
+                    currentEvent["clipboardData"].setData("text/plain", clipboardData);      
+                }
+            }
+		}
+        public function preventDefault():void
+        {
+            if(currentEvent)
+                currentEvent.preventDefault();
+        }
+        private var _callback:Function;
+        // We need to register a callback to know what to do with the copy, cut and paste events
+        public function registerCallback(callback:Function):void
+        {
+            _callback = callback;
+        }
+
+    }    
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/455f8802/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/EditManager.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/EditManager.as b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/EditManager.as
index a0d7bde..062cbc0 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/EditManager.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/EditManager.as
@@ -319,6 +319,26 @@ package org.apache.flex.textLayout.edit
 							deletePreviousWord();
 							event.preventDefault();
 							break;
+						
+					}
+					//copy/paste
+					// in Flash there is special events for this.
+					COMPILE::JS
+					{
+						switch(event.code)
+						{
+							//Paste and cut need to be handled inside the "paste" and "cut" events
+							case "KeyV"://paste fallthrough
+								// editHandler(new Event(EditEvent.PASTE));
+								// event.preventDefault();
+								// break;
+							case "KeyX"://cut
+								Clipboard.generalClipboard.registerCallback(editHandler);
+								// editHandler(new Event(EditEvent.CUT));
+								// event.preventDefault();
+								break;
+						}
+
 					}
 					if (event.code == EditingKeys.DELETE)
 					{

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/455f8802/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/SelectionManager.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/SelectionManager.as b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/SelectionManager.as
index 1860ac3..cbc693a 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/SelectionManager.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/SelectionManager.as
@@ -43,7 +43,6 @@ package org.apache.flex.textLayout.edit
 	import org.apache.flex.textLayout.debug.assert;
 	import org.apache.flex.textLayout.dummy.BitmapData;
 	import org.apache.flex.textLayout.dummy.BoundsUtil;
-	import org.apache.flex.textLayout.dummy.Clipboard;
 	import org.apache.flex.textLayout.dummy.ContextMenu;
 	import org.apache.flex.textLayout.dummy.IBitmapDrawable;
 	import org.apache.flex.textLayout.dummy.Mouse;
@@ -74,6 +73,7 @@ package org.apache.flex.textLayout.edit
 	import org.apache.flex.textLayout.operations.FlowOperation;
 	import org.apache.flex.textLayout.utils.NavigationUtil;
 	import org.apache.flex.utils.PointUtils;
+	import org.apache.flex.textLayout.edit.Clipboard;
 
 	/** 
 	 * The SelectionManager class manages text selection in a text flow.
@@ -2581,7 +2581,10 @@ package org.apache.flex.textLayout.edit
 		{
 			var selState:SelectionState = null;
 			flushPendingOperations();
+			if(event.defaultPrevented)
+				return;
 
+			
 			switch (event.code)
 			{
 				case NavigationKeys.LEFT:
@@ -2634,6 +2637,29 @@ package org.apache.flex.textLayout.edit
 			if (!hasSelection() || event.defaultPrevented)
 				return;
 
+			//copy/paste
+			// in Flash there is special events for this.
+			COMPILE::JS
+			{
+				if(event.specialKey && !event.altKey && !event.defaultPrevented)
+				{
+					switch(event.code)
+					{
+						// Copy is handled internally by the Clipboard class
+						case "KeyC"://copy
+							Clipboard.generalClipboard.registerCallback(editHandler);
+						// 	editHandler(new Event(EditEvent.COPY));
+						// 	event.preventDefault();
+							break;
+						case "KeyA"://select all
+							editHandler(new Event(SelectionEvent.SELECT_ALL));
+							event.preventDefault();
+							break;
+					}
+				}
+
+			}
+
 			// if (event.charCode == 0)
 			// {
 			// the keycodes that we currently handle

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/455f8802/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/TextClipboard.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/TextClipboard.as b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/TextClipboard.as
index 69d50b8..4c11c67 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/TextClipboard.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/TextClipboard.as
@@ -24,12 +24,14 @@ package org.apache.flex.textLayout.edit
 	import org.apache.flex.textLayout.conversion.ITextExporter;
 	import org.apache.flex.textLayout.conversion.ITextImporter;
 	import org.apache.flex.textLayout.conversion.TextConverter;
-	import org.apache.flex.textLayout.dummy.Clipboard;
 	import org.apache.flex.textLayout.elements.FlowGroupElement;
 	import org.apache.flex.textLayout.elements.IFlowElement;
 	import org.apache.flex.textLayout.elements.ITextFlow;
 
-		
+	COMPILE::JS
+	{
+		import org.apache.flex.textLayout.conversion.PlainTextImporter;
+	}
 
 
 	/**
@@ -74,7 +76,28 @@ package org.apache.flex.textLayout.edit
 		 */										
 		public static function getContents():TextScrap
 		{
-			var systemClipboard:Clipboard = Clipboard.generalClipboard;	
+			var systemClipboard:Clipboard = Clipboard.generalClipboard;
+			COMPILE::SWF
+			{
+				return importScrap(getFromClipboard);
+			}
+
+			COMPILE::JS
+			{
+				systemClipboard.preventDefault();
+				if(systemClipboard.hasFormat(TextConverter.TEXT_LAYOUT_FORMAT))
+					return systemClipboard.getData(TextConverter.TEXT_LAYOUT_FORMAT) as TextScrap;
+				else
+				{
+					var importer:PlainTextImporter = new PlainTextImporter();
+					var flow:ITextFlow = importer.importToFlow(systemClipboard.getData("text/plain"));
+					var textScrap:TextScrap = new TextScrap(flow);
+					textScrap.setPlainText(true);
+					return textScrap;
+				}
+			}
+
+
 			return importScrap(getFromClipboard);
 
 			function getFromClipboard(clipboardFormat:String):String
@@ -134,7 +157,17 @@ package org.apache.flex.textLayout.edit
 			var systemClipboard:Clipboard = Clipboard.generalClipboard;
 			systemClipboard.clear();
 			
-			exportScrap(textScrap, addToClipboard);
+			COMPILE::SWF
+			{
+				exportScrap(textScrap, addToClipboard);
+			}
+
+			COMPILE::JS
+			{
+				systemClipboard.setData(TextConverter.TEXT_LAYOUT_FORMAT, textScrap);
+				systemClipboard.setData("text/plain", textScrap.textFlow.getText());
+				systemClipboard.preventDefault();
+			}
 
 			function addToClipboard(clipboardFormat:String, clipboardData:String):void 
 			{ 						

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/455f8802/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/ITLFFactory.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/ITLFFactory.as b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/ITLFFactory.as
index d122879..627d03e 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/ITLFFactory.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/ITLFFactory.as
@@ -34,5 +34,7 @@ package org.apache.flex.textLayout.factory {
 		// of the font information it needs
 		function get currentContainer():IParentIUIBase;
 		function set currentContainer(value:IParentIUIBase):void
+		function getBlendMode(obj:Object):String;
+		function setBlendMode(obj:Object,value:String):void;
 	}
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/455f8802/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/StandardTLFFactory.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/StandardTLFFactory.as b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/StandardTLFFactory.as
index 0ed80f1..75202c6 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/StandardTLFFactory.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/factory/StandardTLFFactory.as
@@ -57,5 +57,14 @@ package org.apache.flex.textLayout.factory {
 		{
 			_currentContainer = value;
 		}
+		public function getBlendMode(obj:Object):String
+		{
+			return "normal";
+		}
+
+		public function setBlendMode(obj:Object,value:String):void
+		{
+			
+		}
 	}
 }
\ No newline at end of file