Skip to content

Instantly share code, notes, and snippets.

@davidortinau
Created November 25, 2010 03:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davidortinau/714845 to your computer and use it in GitHub Desktop.
Save davidortinau/714845 to your computer and use it in GitHub Desktop.
Hero TextArea hack to detect tap vs scroll and set focus manually on TextArea
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
creationComplete="view1_creationCompleteHandler(event)"
title="TextArea Workaround">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
[Bindable]
private var _beginTouch:Point;
[Bindable]
private var _endTouch:Point;
[Bindable]
private var _touchGesture:String;
protected function view1_creationCompleteHandler(event:FlexEvent):void
{
_touchGesture = "";
this.addEventListener(MouseEvent.MOUSE_DOWN, onTouchBegin);
this.addEventListener(MouseEvent.MOUSE_UP, onTouchEnd);
}
protected function onTouchBegin(e:MouseEvent):void
{
_beginTouch = new Point(e.stageX, e.stageY);
}
protected function onTouchEnd(e:MouseEvent):void
{
_endTouch = new Point(e.stageX, e.stageY);
if(Point.distance(_beginTouch, _endTouch) == 0){
_touchGesture = "TAP!";
setFocusOnTextArea();
}else{
_touchGesture = "draaaaaaaaaaag";
}
}
protected function setFocusOnTextArea():void
{
if(isTextAreaUnderPoint())
{
textArea.mouseEnabled = textArea.mouseChildren = true;
textArea.setFocus();
}else{
textArea.mouseEnabled = textArea.mouseChildren = false;
contentScroller.setFocus();
}
}
protected function isTextAreaUnderPoint():Boolean
{
for each(var obj:Object in this.contentGroup.getObjectsUnderPoint(_endTouch))
{
if(DisplayObject(obj.parent).name == textArea.name)
return true;
}
return false;
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:VGroup width="100%" height="100%">
<s:Label text="Begin Touch (x,y): {_beginTouch.x.toString() + ', ' + _beginTouch.y.toString()}" width="100%"/>
<s:Label text="End Touch (x,y): {_endTouch.x.toString() + ', ' + _endTouch.y.toString()}" width="100%"/>
<s:Label text="Gesture: {_touchGesture}" width="100%"/>
<s:Scroller id="contentScroller" width="100%" height="100%">
<s:VGroup id="contentGroup" width="100%" paddingTop="20" paddingLeft="20" paddingRight="20" paddingBottom="20" gap="20">
<s:TextArea id="textArea" fontSize="24"
text="Drag and scroll, or tap the TextArea to edit. This is my text area This is my text area This is my text area This is my text area This is my text area This is my text area This is my text area This is my text area This is my text area This is my text area This is my text area This is my text area This is my text area This is my text area "
mouseEnabled="false"
mouseChildren="false"
heightInLines="20"
width="100%" />
<s:RichText id="otherText" fontSize="24"
text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer fringilla lacinia massa sed gravida. Nam pellentesque imperdiet ante, non dictum lacus consequat a. Suspendisse velit justo, ultricies sit amet vestibulum sed, dictum id enim. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla quis nibh lorem. Vestibulum dapibus placerat nibh, sed convallis neque tempus eget. Curabitur dignissim, ipsum nec adipiscing pharetra, dolor velit placerat eros, vel iaculis enim magna at sapien. Maecenas egestas hendrerit malesuada. Vestibulum vestibulum interdum tortor, a condimentum metus eleifend vel. Quisque dui sem, sodales sed tincidunt tincidunt, suscipit in risus. Vestibulum sollicitudin lorem non sapien tempus vitae euismod velit tempor. Donec vel elit felis, ut aliquet nunc. In vel odio vel odio lacinia luctus. Sed ultrices neque eu magna elementum vulputate faucibus ante varius. Sed diam justo, aliquet vel venenatis id, tincidunt vel erat. Nulla nisi nibh, mollis non egestas vitae, rhoncus et turpis.Vestibulum sed lorem nulla, sed accumsan mauris. Donec nec mollis tortor. Morbi cursus bibendum nisi ac scelerisque. Nunc elementum posuere nulla sit amet ornare. In ut dolor magna. Integer mollis eleifend felis at fermentum. Donec aliquam massa ut urna bibendum posuere. Phasellus pharetra, lectus ut pretium eleifend, nisi nisi vulputate metus, in commodo neque est a felis. Etiam vestibulum volutpat turpis ut commodo. Nulla sed massa a massa condimentum auctor vitae in lorem. Etiam accumsan dictum mollis.Quisque in elit felis. Pellentesque orci lacus, rutrum luctus interdum ut, placerat quis dolor. Donec sed egestas urna. Ut sed ipsum diam, sed fermentum mi. Proin orci nisi, pharetra nec fringilla in, eleifend eget ligula. Morbi imperdiet, quam a consectetur lacinia, lectus dolor laoreet purus, a hendrerit nisi ligula posuere elit. Morbi ipsum libero, tincidunt vel rutrum viverra, dignissim vitae justo. In hac habitasse platea dictumst. Suspendisse venenatis ante eu felis facilisis eget faucibus augue eleifend. Suspendisse bibendum lobortis ante nec tempus. Donec imperdiet massa nec urna vestibulum venenatis. Quisque ut dui vel sem interdum consequat. Nulla scelerisque tellus vitae lorem pulvinar vitae iaculis massa hendrerit. Nullam semper mollis orci, a hendrerit metus faucibus vitae. Fusce gravida magna leo, vitae pretium nisl. Morbi et bibendum mi. Ut semper vulputate sem et fringilla. Morbi nec nibh mauris, in gravida felis. Quisque eget posuere lorem. Sed varius convallis leo ut ornare. Sed tincidunt nulla metus, vel ultrices nibh. Morbi vel est augue, et iaculis metus. Suspendisse fermentum nisi lacus, a faucibus enim. Maecenas dapibus cursus eros vitae porta. Curabitur et nisl risus. Sed iaculis metus sed turpis pulvinar condimentum ultricies est ultrices.Duis in orci lectus, at bibendum ante. Donec vitae leo erat. Etiam sed neque at massa viverra euismod non ac sapien. Sed at nisi quis nunc feugiat eleifend at sed eros. Donec hendrerit metus cursus dui ullamcorper vehicula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla facilisi. Integer lectus erat, dictum ut cursus quis, ultrices non quam. Donec eu quam nec lorem porttitor pulvinar. Sed mollis, justo eget pharetra consectetur, diam arcu venenatis nibh, eget iaculis augue nisl vitae purus. Nam nec ligula nulla, ut hendrerit sapien. Proin pharetra sodales quam eu lacinia. Nulla vestibulum auctor lectus, sed mollis metus eleifend ac. Ut diam augue, facilisis a consequat vitae, faucibus sed justo. Ut sed quam ac magna volutpat feugiat. Mauris fringilla fringilla mollis. Cras congue commodo leo id facilisis. Integer sapien neque, adipiscing eget consectetur a, consectetur at metus."
mouseEnabled="false" paragraphSpaceAfter="20"
mouseChildren="false"
width="100%" />
</s:VGroup>
</s:Scroller>
</s:VGroup>
</s:View>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment