blob: 2345789ec7dac6ef85a3d0644b2afc46ab5f4e37 [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// 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.DisplayObjectContainer;
import flashx.textLayout.compose.IFlowComposer;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.debug.assert;
import flashx.textLayout.formats.ITextLayoutFormat;
import flashx.textLayout.formats.TextLayoutFormat;
import flashx.textLayout.tlf_internal;
use namespace tlf_internal;
/**
* ContainerFormattedElement is the root class for all container-level block elements, such as DivElement
* and TextFlow objects. Container-level block elements are grouping elements for other FlowElement objects.
*
* @playerversion Flash 10
* @playerversion AIR 1.5
* @langversion 3.0
*
* @see DivElement
* @see TextFlow
*/
public class ContainerFormattedElement extends ParagraphFormattedElement
{
/** @private */
public function get flowComposer():IFlowComposer
{
// TODO: this is here for legacy purposes. What we really want to do is determine if a given element has its own physical representation
// That used to be the containerController and may be again. This is all intermediate for now. Reinvestigate when Tables are enabled and Div's with containers are implemented.
return null;
}
/** @private */
tlf_internal override function formatChanged(notifyModelChanged:Boolean = true):void
{
super.formatChanged(notifyModelChanged);
// The associated container, if there is one, inherits its container
// attributes from here. So we need to tell it that these attributes
// have changed.
if (flowComposer)
{
for (var idx:int = 0; idx < flowComposer.numControllers; idx++)
flowComposer.getControllerAt(idx).formatChanged();
}
}
/** @private */
tlf_internal function preCompose():void
{ return; }
/** @private */
CONFIG::debug public override function debugCheckFlowElement(depth:int = 0, extraData:String = ""):int
{
// debugging function that asserts if the flow element tree is in an invalid state
if (flowComposer && flowComposer.numControllers)
{
var controller:ContainerController = flowComposer.getControllerAt(0);
extraData = getDebugIdentity(controller.container)+" b:"+controller.absoluteStart+" l:" +controller.textLength+extraData;
extraData = extraData+" w:"+controller.compositionWidth+" h:"+controller.compositionHeight;
}
return super.debugCheckFlowElement(depth,extraData);
}
/** @private */
tlf_internal override function normalizeRange(normalizeStart:uint,normalizeEnd:uint):void
{
super.normalizeRange(normalizeStart,normalizeEnd);
// is this an absolutely element?
if (this.numChildren == 0)
{
var p:ParagraphElement = new ParagraphElement();
if (this.canOwnFlowElement(p))
{
p.replaceChildren(0,0,new SpanElement());
replaceChildren(0,0,p);
CONFIG::debug { assert(textLength == 1,"bad textlength"); }
p.normalizeRange(0,p.textLength);
}
}
}
}
}