Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 3E3B9200CB3 for ; Mon, 26 Jun 2017 23:29:24 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 3D23B160BDE; Mon, 26 Jun 2017 21:29:24 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id DABB8160BDA for ; Mon, 26 Jun 2017 23:29:22 +0200 (CEST) Received: (qmail 57172 invoked by uid 500); 26 Jun 2017 21:29:22 -0000 Mailing-List: contact commits-help@flex.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@flex.apache.org Delivered-To: mailing list commits@flex.apache.org Received: (qmail 57164 invoked by uid 99); 26 Jun 2017 21:29:22 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 26 Jun 2017 21:29:22 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id F1A1FDFAF5; Mon, 26 Jun 2017 21:29:21 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: harbs@apache.org To: commits@flex.apache.org Message-Id: <4fd88a322e2245a894cf65eef24bfa1d@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: 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. Date: Mon, 26 Jun 2017 21:29:21 +0000 (UTC) archived-at: Mon, 26 Jun 2017 21:29:24 -0000 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 Authored: Tue Jun 27 00:29:17 2017 +0300 Committer: Harbs 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