| //////////////////////////////////////////////////////////////////////////////// |
| // |
| // 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 flashx.textLayout.elements |
| { |
| import flash.display.BlendMode; |
| import flash.display.Sprite; |
| import flash.system.Capabilities; |
| |
| import flashx.textLayout.compose.StandardFlowComposer; |
| import flashx.textLayout.edit.SelectionFormat; |
| import flashx.textLayout.formats.FormatValue; |
| import flashx.textLayout.formats.IListMarkerFormat; |
| import flashx.textLayout.formats.ITextLayoutFormat; |
| import flashx.textLayout.formats.ListMarkerFormat; |
| import flashx.textLayout.formats.TextDecoration; |
| import flashx.textLayout.formats.TextLayoutFormat; |
| import flashx.textLayout.tlf_internal; |
| |
| use namespace tlf_internal; |
| |
| /** |
| * The Configuration class is a primary point of integration between the Text Layout Framework and an application. You can |
| * include a Configuration object as a parameter to the <code>TextFlow()</code> constructor when you create a new TextFlow |
| * instance. It allows the application to initially control how the Text Layout Framework behaves. |
| * |
| * <p>The Configuration class allows you to specify initial, paragraph and container formats for the text flow |
| * through the <code>textFlowInitialFormat</code> property. It also allows you to specify initial format attributes for links, selection, |
| * scrolling, and for handling the Tab and Enter keys.</p> |
| * |
| * @includeExample examples\ConfigurationExample.as -noswf |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see flashx.textLayout.formats.ITextLayoutFormat ITextLayoutFormat |
| * @see flashx.textLayout.edit.SelectionFormat SelectionFormat |
| * @see TextFlow |
| */ |
| |
| public class Configuration implements IConfiguration |
| { |
| /** @private */ |
| static tlf_internal function versionIsAtLeast(major:int,minor:int):Boolean |
| { |
| var versionData:Array = Capabilities.version.split(" ")[1].split(","); |
| return int(versionData[0]) > major || (int(versionData[0]) == major && int(versionData[1]) >= minor); |
| } |
| |
| /** @private The player may disable the feature for older swfs. */ |
| static tlf_internal const playerEnablesArgoFeatures:Boolean = versionIsAtLeast(10,1); |
| |
| /** @private The player may disable the feature for older swfs, so its not enough to check |
| the Player version number, the SWF must also be marked as a version 11 SWF to use Spicy features. */ |
| static tlf_internal const playerEnablesSpicyFeatures:Boolean = versionIsAtLeast(10,2) && (new Sprite).hasOwnProperty("needsSoftKeyboard"); |
| static tlf_internal const hasTouchScreen:Boolean = playerEnablesArgoFeatures && Capabilities["touchScreenType"] != "none"; |
| |
| /** If manageTabKey and manageEnterKey are false, the client must handle those keys on their own. */ |
| private var _manageTabKey:Boolean; |
| private var _manageEnterKey:Boolean; |
| |
| private var _overflowPolicy:String; |
| |
| private var _enableAccessibility:Boolean; |
| private var _releaseLineCreationData:Boolean; |
| |
| private var _defaultLinkNormalFormat:ITextLayoutFormat; |
| private var _defaultLinkActiveFormat:ITextLayoutFormat; |
| private var _defaultLinkHoverFormat:ITextLayoutFormat; |
| |
| private var _defaultListMarkerFormat:IListMarkerFormat; |
| |
| private var _textFlowInitialFormat:ITextLayoutFormat; |
| |
| private var _focusedSelectionFormat:SelectionFormat; |
| private var _unfocusedSelectionFormat:SelectionFormat; |
| private var _inactiveSelectionFormat:SelectionFormat; |
| |
| // scrolling vars |
| private var _scrollDragDelay:Number; |
| private var _scrollDragPixels:Number; |
| private var _scrollPagePercentage:Number; |
| private var _scrollMouseWheelMultiplier:Number; |
| |
| private var _flowComposerClass:Class; |
| private var _inlineGraphicResolverFunction:Function; |
| |
| /** Constructor - creates a default configuration. |
| * |
| * @param initializeWithDefaults Specifies whether to initialize the configuration with |
| * the default values. Default is <code>true</code>. If set to <code>false</code>, initializes |
| * without default values, thereby saving some objects. The <code>clone()</code> method sets this |
| * to <code>false</code> and copies the properties from the original object. |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see flashx.textLayout.edit.SelectionFormat SelectionFormat |
| * @see flashx.textLayout.compose.StandardFlowComposer StandardFlowComposer |
| */ |
| public function Configuration(initializeWithDefaults:Boolean = true) |
| { |
| if (initializeWithDefaults) |
| initialize() |
| } |
| |
| private function initialize():void |
| { |
| var scratchFormat:TextLayoutFormat; |
| |
| _manageTabKey = false; |
| _manageEnterKey = true; |
| _overflowPolicy = OverflowPolicy.FIT_DESCENDERS; |
| _enableAccessibility = false; |
| _releaseLineCreationData = false; |
| |
| _focusedSelectionFormat = new SelectionFormat(0xffffff, 1.0, BlendMode.DIFFERENCE); |
| _unfocusedSelectionFormat = new SelectionFormat(0xffffff, 0, BlendMode.DIFFERENCE, 0xffffff, 0.0, BlendMode.DIFFERENCE, 0); |
| _inactiveSelectionFormat = _unfocusedSelectionFormat; |
| |
| scratchFormat = new TextLayoutFormat(); |
| scratchFormat.textDecoration = TextDecoration.UNDERLINE; |
| scratchFormat.color = 0x0000FF;//default link color is blue |
| _defaultLinkNormalFormat = scratchFormat; |
| |
| var listMarkerFormat:ListMarkerFormat = new ListMarkerFormat(); |
| listMarkerFormat.paragraphEndIndent = 4; |
| _defaultListMarkerFormat = listMarkerFormat; |
| |
| scratchFormat = new TextLayoutFormat(); |
| scratchFormat.lineBreak = FormatValue.INHERIT; |
| scratchFormat.paddingLeft = FormatValue.INHERIT; |
| scratchFormat.paddingRight = FormatValue.INHERIT; |
| scratchFormat.paddingTop = FormatValue.INHERIT; |
| scratchFormat.paddingBottom = FormatValue.INHERIT; |
| scratchFormat.verticalAlign = FormatValue.INHERIT; |
| scratchFormat.columnCount = FormatValue.INHERIT; |
| scratchFormat.columnCount = FormatValue.INHERIT; |
| scratchFormat.columnGap = FormatValue.INHERIT; |
| scratchFormat.columnWidth = FormatValue.INHERIT; |
| _textFlowInitialFormat = scratchFormat; |
| |
| _scrollDragDelay = 35; |
| _scrollDragPixels = 20; |
| _scrollPagePercentage = 7.0/8.0; |
| _scrollMouseWheelMultiplier = 20; |
| |
| _flowComposerClass = StandardFlowComposer; |
| } |
| |
| private var _immutableClone:IConfiguration; |
| |
| /** TextFlows are configured with an immutable clone of a Configuration. Once a TextFlow is create it uses an immutable configuration. @private */ |
| tlf_internal function getImmutableClone():IConfiguration |
| { |
| if (!_immutableClone) |
| { |
| var clonedConifg:Configuration = clone(); |
| _immutableClone = clonedConifg; |
| // an immutable clone is its own immutable clone |
| clonedConifg._immutableClone = clonedConifg; |
| } |
| return _immutableClone; |
| } |
| |
| /** Creates a clone of the Configuration object. |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| */ |
| public function clone():Configuration |
| { |
| var config:Configuration = new Configuration(false); |
| // must copy all values |
| config.defaultLinkActiveFormat = defaultLinkActiveFormat; |
| config.defaultLinkHoverFormat = defaultLinkHoverFormat; |
| config.defaultLinkNormalFormat = defaultLinkNormalFormat; |
| config.defaultListMarkerFormat = defaultListMarkerFormat; |
| config.textFlowInitialFormat = _textFlowInitialFormat; |
| config.focusedSelectionFormat = _focusedSelectionFormat; |
| config.unfocusedSelectionFormat = _unfocusedSelectionFormat; |
| config.inactiveSelectionFormat = _inactiveSelectionFormat; |
| |
| config.manageTabKey = _manageTabKey; |
| config.manageEnterKey = _manageEnterKey; |
| config.overflowPolicy = _overflowPolicy; |
| config.enableAccessibility = _enableAccessibility; |
| config.releaseLineCreationData = _releaseLineCreationData; |
| |
| config.scrollDragDelay = _scrollDragDelay; |
| config.scrollDragPixels = _scrollDragPixels; |
| config.scrollPagePercentage = _scrollPagePercentage; |
| config.scrollMouseWheelMultiplier = _scrollMouseWheelMultiplier; |
| |
| config.flowComposerClass = _flowComposerClass; |
| config._inlineGraphicResolverFunction = _inlineGraphicResolverFunction; |
| return config; |
| } |
| |
| /** @copy IConfiguration#manageTabKey |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| */ |
| |
| public function get manageTabKey():Boolean |
| { return _manageTabKey; } |
| public function set manageTabKey(val:Boolean):void |
| { _manageTabKey = val; _immutableClone = null; } |
| |
| /** |
| * @copy IConfiguration#manageEnterKey |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| */ |
| |
| public function get manageEnterKey():Boolean |
| { return _manageEnterKey; } |
| public function set manageEnterKey(val:Boolean):void |
| { _manageEnterKey = val; _immutableClone = null; } |
| |
| |
| |
| /** |
| * @copy IConfiguration#overflowPolicy |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see OverflowPolicy |
| */ |
| |
| public function get overflowPolicy():String |
| { return _overflowPolicy; } |
| public function set overflowPolicy(value:String):void |
| { _overflowPolicy = value; } |
| |
| /** |
| * @copy IConfiguration#defaultLinkNormalFormat |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see FlowElement#linkNormalFormat |
| * @see flashx.textLayout.formats.ITextLayoutFormat ITextLayoutFormat |
| * @see LinkElement |
| */ |
| |
| public function get defaultLinkNormalFormat():ITextLayoutFormat |
| { return _defaultLinkNormalFormat; } |
| public function set defaultLinkNormalFormat(val:ITextLayoutFormat):void |
| { _defaultLinkNormalFormat = val; _immutableClone = null; } |
| |
| /** |
| * @copy IConfiguration#defaultListMarkerFormat |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see FlowElement#listMarkerFormat |
| * @see flashx.textLayout.formats.IListMarkerFormat IListMarkerFormat |
| * @see LinkElement |
| */ |
| |
| public function get defaultListMarkerFormat():IListMarkerFormat |
| { return _defaultListMarkerFormat; } |
| public function set defaultListMarkerFormat(val:IListMarkerFormat):void |
| { _defaultListMarkerFormat = val; _immutableClone = null; } |
| |
| /** |
| * @copy IConfiguration#defaultLinkHoverFormat |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see FlowElement#linkHoverFormat |
| * @see flashx.textLayout.formats.ITextLayoutFormat ITextLayoutFormat |
| * @see LinkElement |
| */ |
| |
| public function get defaultLinkHoverFormat():ITextLayoutFormat |
| { return _defaultLinkHoverFormat; } |
| public function set defaultLinkHoverFormat(val:ITextLayoutFormat):void |
| { _defaultLinkHoverFormat = val; _immutableClone = null; } |
| |
| /** |
| * @copy IConfiguration#defaultLinkActiveFormat |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see FlowElement#linkActiveFormat |
| * @see flashx.textLayout.formats.ITextLayoutFormat ITextLayoutFormat |
| * @see LinkElement |
| */ |
| |
| public function get defaultLinkActiveFormat():ITextLayoutFormat |
| { return _defaultLinkActiveFormat; } |
| public function set defaultLinkActiveFormat(val:ITextLayoutFormat):void |
| { _defaultLinkActiveFormat = val; _immutableClone = null; } |
| |
| /** |
| * @copy IConfiguration#textFlowInitialFormat |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see TextFlow |
| * @see flashx.textLayout.formats.ITextLayoutFormat ITextLayoutFormat |
| */ |
| |
| public function get textFlowInitialFormat():ITextLayoutFormat |
| { return _textFlowInitialFormat; } |
| public function set textFlowInitialFormat(val:ITextLayoutFormat):void |
| { _textFlowInitialFormat = val; _immutableClone = null; } |
| |
| |
| |
| /** |
| * @copy IConfiguration#focusedSelectionFormat |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see flashx.textLayout.edit.SelectionFormat SelectionFormat |
| * @see flashx.textLayout.edit.SelectionManager#focusedSelectionFormat SelectionManager.focusedSelectionFormat |
| * @see TextFlow |
| */ |
| |
| public function get focusedSelectionFormat():SelectionFormat |
| { return _focusedSelectionFormat; } |
| public function set focusedSelectionFormat(val:SelectionFormat):void |
| { if (val != null) |
| { |
| _focusedSelectionFormat = val; |
| _immutableClone = null; |
| } |
| } |
| |
| /** |
| * @copy IConfiguration#unfocusedSelectionFormat |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see flashx.textLayout.edit.SelectionFormat SelectionFormat |
| * @see flashx.textLayout.edit.SelectionManager#unfocusedSelectionFormat SelectionManager.unfocusedSelectionFormat |
| * @see TextFlow |
| */ |
| |
| public function get unfocusedSelectionFormat():SelectionFormat |
| { return _unfocusedSelectionFormat; } |
| public function set unfocusedSelectionFormat(val:SelectionFormat):void |
| { if (val != null) |
| { |
| _unfocusedSelectionFormat = val; |
| _immutableClone = null; |
| } |
| } |
| |
| /** |
| * @copy IConfiguration#inactiveSelectionFormat |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see flashx.textLayout.edit.SelectionFormat SelectionFormat |
| * @see flashx.textLayout.edit.SelectionManager#inactiveSelectionFormat SelectionManager.inactiveSelectionFormat |
| * @see TextFlow |
| */ |
| |
| public function get inactiveSelectionFormat():SelectionFormat |
| { return _inactiveSelectionFormat; } |
| public function set inactiveSelectionFormat(val:SelectionFormat):void |
| { |
| if (val != null) |
| { |
| _inactiveSelectionFormat = val; |
| _immutableClone = null; |
| } |
| } |
| |
| /** |
| * @copy IConfiguration#scrollDragDelay |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| */ |
| |
| public function get scrollDragDelay():Number |
| { return _scrollDragDelay; } |
| public function set scrollDragDelay(val:Number):void |
| { |
| if (val > 0) { |
| _scrollDragDelay = val; |
| _immutableClone = null; |
| } |
| } |
| |
| /** |
| * @copy IConfiguration#scrollDragPixels |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| */ |
| |
| public function get scrollDragPixels():Number |
| { return _scrollDragPixels; } |
| public function set scrollDragPixels(val:Number):void |
| { |
| if (val > 0) { |
| _scrollDragPixels = val; |
| _immutableClone = null; |
| } |
| } |
| |
| /** |
| * @copy IConfiguration#scrollPagePercentage |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| */ |
| |
| public function get scrollPagePercentage(): Number |
| { return _scrollPagePercentage; } |
| public function set scrollPagePercentage(val:Number):void |
| { |
| if (val > 0) { |
| _scrollPagePercentage = val; |
| _immutableClone = null; |
| } |
| } |
| |
| /** |
| * @copy IConfiguration#scrollMouseWheelMultiplier |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| */ |
| |
| public function get scrollMouseWheelMultiplier(): Number |
| { return _scrollMouseWheelMultiplier; } |
| public function set scrollMouseWheelMultiplier(val:Number):void |
| { |
| if (val > 0) { |
| _scrollMouseWheelMultiplier = val; |
| _immutableClone = null; |
| } |
| } |
| |
| /** |
| * @copy IConfiguration#flowComposerClass |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see flashx.textLayout.compose.StandardFlowComposer StandardFlowComposer |
| * @see flashx.textLayout.elements.TextFlow TextFlow |
| */ |
| |
| public function get flowComposerClass(): Class |
| { return _flowComposerClass; } |
| public function set flowComposerClass(val:Class):void |
| { |
| _flowComposerClass = val; |
| _immutableClone = null; |
| } |
| |
| /** |
| * @copy IConfiguration#enableAccessibility |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see TextFlow |
| */ |
| |
| public function get enableAccessibility():Boolean |
| { return _enableAccessibility; } |
| public function set enableAccessibility(val:Boolean):void |
| { |
| _enableAccessibility = val; |
| _immutableClone = null; |
| } |
| |
| /** |
| * @copy IConfiguration#releaseLineCreationData |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see flashx.textLayout.compose.StandardFlowComposer StandardFlowComposer |
| * @see flash.text.engine.TextBlock#releaseLineCreationData() TextBlock.releaseLineCreationData() |
| */ |
| |
| public function get releaseLineCreationData():Boolean |
| { return _releaseLineCreationData; } |
| public function set releaseLineCreationData(val:Boolean):void |
| { |
| _releaseLineCreationData = val; |
| _immutableClone = null; |
| } |
| |
| /** Returns true if the ActionScript text engine was built with debugging code enabled. @private */ |
| static tlf_internal function get debugCodeEnabled():Boolean |
| { |
| CONFIG::debug { return true; } |
| CONFIG::release { return false; } |
| } |
| |
| /** |
| * @copy IConfiguration#inlineGraphicResolverFunction |
| * |
| * @playerversion Flash 10 |
| * @playerversion AIR 1.5 |
| * @langversion 3.0 |
| * |
| * @see flashx.textLayout.elements.InlineGraphicElement InlineGraphicElement |
| */ |
| public function get inlineGraphicResolverFunction():Function |
| { |
| return _inlineGraphicResolverFunction; |
| } |
| public function set inlineGraphicResolverFunction(val:Function):void |
| { |
| _inlineGraphicResolverFunction = val; |
| _immutableClone = null; |
| } |
| } |
| } |