Skip to content

Commit

Permalink
Emulation - first implementation of truncateToFit
Browse files Browse the repository at this point in the history
  • Loading branch information
yishayw committed May 25, 2022
1 parent 649ab78 commit fd3265f
Show file tree
Hide file tree
Showing 3 changed files with 165 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@
<component id="PasswordInputRemovableBead" class="org.apache.royale.html.accessories.PasswordInputRemovableBead" />
<component id="TextPromptBead" class="org.apache.royale.html.accessories.TextPromptBead" />
<component id="EllipsisOverflow" class="org.apache.royale.html.beads.EllipsisOverflow" />
<component id="ReversibleEllipsisOverflow" class="org.apache.royale.html.beads.ReversibleEllipsisOverflow" />
<component id="HRule" class="org.apache.royale.html.HRule" />
<component id="VRule" class="org.apache.royale.html.VRule" />
<component id="Spacer" class="org.apache.royale.html.Spacer" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
////////////////////////////////////////////////////////////////////////////////
//
// 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.royale.html.beads
{

import org.apache.royale.core.IBead;
import org.apache.royale.core.IStrand;
import org.apache.royale.core.IUIBase;

/**
* The ReversibleEllipsisOverflow class is a bead that can be used
* to stop the text from overflowing and display an ellipsis.
* It adds an option to revert the strand to its old state
*
* @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
* @productversion Royale 0.9.10
*/
public class ReversibleEllipsisOverflow implements IBead
{
/**
* constructor.
*
* @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
* @productversion Royale 0.9.10
*/
public function ReversibleEllipsisOverflow()
{
}

private var _strand:IStrand;
private var _oldOverflow:String;
private var _oldTextOverflow:String;
private var _oldDisplay:String;

/**
* @copy org.apache.royale.core.IBead#strand
*
* @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
* @productversion Royale 0.9.10
* @royaleignorecoercion org.apache.royale.core.IUIBase
*/
public function set strand(value:IStrand):void
{
_strand = value;
apply();
}

/**
* Apply ellipsis overflow
*
* @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
* @productversion Royale 0.9.10
* @royaleignorecoercion org.apache.royale.core.IUIBase
*/
public function apply():void
{
// In SWF it's done automatically
COMPILE::JS
{
var style:CSSStyleDeclaration = (_strand as IUIBase).element.style;
_oldOverflow = style.overflow;
_oldTextOverflow = style.textOverflow;
_oldDisplay = style.display;
style.overflow = "hidden";
style.textOverflow = "ellipsis";
style.display = "block";
}

}

/**
* Revert ellipsis overflow
*
* @langversion 3.0
* @playerversion Flash 10.2
* @playerversion AIR 2.6
* @productversion Royale 0.9.10
* @royaleignorecoercion org.apache.royale.core.IUIBase
*/
public function revert():void
{
COMPILE::JS
{
var style:CSSStyleDeclaration = (_strand as IUIBase).element.style;
style.overflow = _oldOverflow;
style.textOverflow = _oldTextOverflow;
style.display = _oldDisplay;
}
}

}
}
68 changes: 48 additions & 20 deletions frameworks/projects/MXRoyale/src/main/royale/mx/controls/Label.as
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import mx.core.IDataRenderer;
import mx.core.UIComponent;
import mx.events.FlexEvent;
import mx.core.IUITextField;
import org.apache.royale.html.beads.ReversibleEllipsisOverflow;

/*
import mx.core.UITextField;
Expand Down Expand Up @@ -790,25 +791,7 @@ public class Label extends UIComponent
return element;
}

//----------------------------------
// truncateToFit
//----------------------------------

/**
* If this propery is <code>true</code>, and the Label control size is
* smaller than its text, the text of the
* Label control is truncated using
* a localizable string, such as <code>"..."</code>.
* If this property is <code>false</code>, text that does not fit is clipped.
*
* @default true
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public var truncateToFit:Boolean = true;
private var _truncationBead:ReversibleEllipsisOverflow;


//----------------------------------
Expand Down Expand Up @@ -893,7 +876,52 @@ public class Label extends UIComponent
return _textWidth;
}


//----------------------------------
// truncateToFit
//----------------------------------

/**
* If this propery is <code>true</code>, and the Label control size is
* smaller than its text, the text of the
* Label control is truncated using
* a localizable string, such as <code>"..."</code>.
* If this property is <code>false</code>, text that does not fit is clipped.
*
* @default true
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
private var _truncateToFit:Boolean = true;
public function get truncateToFit():Boolean
{
return _truncateToFit;
}

public function set truncateToFit(value:Boolean):void
{
if (value && !_truncationBead && initialized)
{
_truncationBead = new ReversibleEllipsisOverflow();
addBead(_truncationBead);
} else if (_truncationBead && _truncateToFit && !value)
{
_truncationBead.revert();
} else if (_truncationBead && !_truncateToFit && value)
{
_truncationBead.apply();
}
_truncateToFit = value;
}

override public function addedToParent():void
{
super.addedToParent();
truncateToFit = _truncateToFit;
}


//--------------------------------------------------------------------------
//
Expand Down

0 comments on commit fd3265f

Please sign in to comment.