AS2: How do I swapDepth of a Shape and a TextField? - actionscript-2

AS2
this.createTextField("lbl_txt", this.getNextHighestDepth(), 70, 5, 150, 30)
lbl_txt.autoSize = true;
lbl_txt.text = "Hello";
var fmt:TextFormat = new TextFormat();
fmt.bold = true;
fmt.color = 0x000000;
fmt.underline = true;
fmt.font = "Arial";
lbl_txt.setTextFormat(fmt);
Timeline Layers
action
button_layer (button_layer is a animation on rollOver)
arrow
background
Desired Result
button_layer and action to be topmost layers and cursor to remain a pointer and not switch to text cursor on rollOver.
action
button_layer
arrow
lbl_txt (TextField created by AS)
background

var textdepth = this.getNextHighestDepth();
//store the depth value somewhere
this.createTextField("lbl_txt", , 70, 5, 150, 30)
lbl_txt.autoSize = true;
lbl_txt.text = "Hello";
var fmt:TextFormat = new TextFormat();
fmt.bold = true;
fmt.color = 0x000000;
fmt.underline = true;
fmt.font = "Arial";
lbl_txt.setTextFormat(fmt);
//now lastly swap it
myMovieClip.swapDepths(textdepth);
Note: the swapee should be a movieclip or a button.

Related

Photoshop paths to linear

I wonder if it's possible to loop over a Photoshop path and set all the points on it to be linear?
Unlike Illustrator, paths in Photoshop is not well documented and a bit cumbersome:
// Switch off any dialog boxes
displayDialogs = DialogModes.ERROR // ERRORS ONLY DialogModes 2
// create a document to work with
var docRef = app.documents.add(200, 200, 72, "untitled");
// call the source document
var srcDoc = app.activeDocument;
// create the array of PathPointInfo objects
var lineArray = new Array();
lineArray.push(new PathPointInfo());
lineArray[0].kind = PointKind.SMOOTHPOINT;
lineArray[0].anchor = new Array(50, 100); // A
lineArray[0].leftDirection = [0, 0];
lineArray[0].rightDirection = lineArray[0].anchor;
lineArray.push(new PathPointInfo());
lineArray[1].kind = PointKind.SMOOTHPOINT;
lineArray[1].anchor = new Array(150, 150); // B
lineArray[1].leftDirection = [0, 0];
lineArray[1].rightDirection = [0, 0];
// create a SubPathInfo object, which holds the line array in its entireSubPath property.
var lineSubPathArray = new Array();
lineSubPathArray.push(new SubPathInfo());
lineSubPathArray[0].operation = ShapeOperation.SHAPEXOR;
lineSubPathArray[0].closed = false;
lineSubPathArray[0].entireSubPath = lineArray;
pathName = "my path";
//create the path item, passing subpath to add method
var myPathItem = docRef.pathItems.add(pathName, lineSubPathArray);
// Set Display Dialogs back to normal
displayDialogs = DialogModes.ALL; // NORMAL
myPath = srcDoc.pathItems.getByName(pathName);
var subPathCount = myPath.subPathItems.length; // Count of subpaths
var msg = "";
msg += subPathCount + " path(s)\n";
for (var i = 0; i < myPath.subPathItems.length; i++)
{
msg += myPath.subPathItems[i] + "\n";
}
alert(msg);
Firstly, I'm having difficulty access the subPathItems items after I created the path.
Secondly, I don't know what the settings for the tangents (.leftDirection, .rightDirection) are for a linear path.
Apart from that it's peachy ;)

Create multiple frames in code behind in Xamarin.Forms

I want to create multiple frames in code-behind, but when creating frames in loop and adding elements in content, only one frame has all elements and other frames are empty! why?
My code is:
private void searchResults_ItemTapped(object sender, ItemTappedEventArgs e)
{
searchResults.IsVisible = false;
Indexes Indexes = (Indexes)searchResults.SelectedItem;
_viewModel.Items.Add(db.RequestToJson(Indexes.Index));
searchbar.Text = string.Empty;
StackLayout Words = new StackLayout();
StackLayout WordDetail = new StackLayout();
foreach (var dt in _viewModel.Items)
{
AddTextToLabel(nameof(dt.Word), dt.Word, WordDetail);
var BaseLang = dt.BaseLang;
AddTextToLabel(nameof(BaseLang.Meaning), BaseLang.Meaning, WordDetail);
Words.Children.Add(new Frame { BackgroundColor = Color.FromHex("2196F3"), Padding = 5, HasShadow = false, Margin = new Thickness(10, 10, 80, 10), Content = new StackLayout { Children = { WordDetail } } });
}
SearchResult.Content = Words;
SearchResult.IsVisible = true;
}
private void AddTextToLabel(string title, string data, StackLayout worddetail)
{
worddetail.Children.Add(new Label { Text = title + ":", FontAttributes = FontAttributes.Bold, TextColor = Color.White });
worddetail.Children.Add(new Label { Text = data, TextColor = Color.White });
}
And here is the result:
you are using the same instance of WordDetail in every iteration of the loop
instead, create a new instance each time
foreach (var dt in _viewModel.Items)
{
StackLayout WordDetail = new StackLayout();
I reproduced your situation locally by copying your code. I solved it by moving the WordDetail declaration inside the foreach like so:
StackLayout Words = new StackLayout();
foreach (var dt in _viewModel.Items)
{
StackLayout WordDetail = new StackLayout();
AddTextToLabel(nameof(dt.Word), dt.Word, WordDetail);
var BaseLang = dt.BaseLang;
AddTextToLabel(nameof(BaseLang.Meaning), BaseLang.Meaning, WordDetail);
Words.Children.Add(new Frame { BackgroundColor = Color.FromHex("2196F3"), Padding = 5, HasShadow = false, Margin = new Thickness(10, 10, 80, 10), Content = new StackLayout { Children = { WordDetail } } });
}

How to override the parent layout/view opacity for certain elements in xamarin forms?

So I'm trying to develop a custom control which has Opacity of about 0.2, and its an entry, but the problem here is if I set the Opacity of the entry, then the Placeholder or the hint text also gets the opacity, and my custom control has an image as well, which gets the opacity as well, is there a way to override this?
I tried setting the alpha in the renderer but that doesn't seem to do the trick,
Here's my renderer and the output I need, but what I'm getting in actual
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (e.OldElement != null || e.NewElement == null)
return;
var element = (ImageEntry)this.Element;
this.Control.Placeholder = element.Placeholder;
var textField = this.Control;
if (!string.IsNullOrEmpty(element.Image))
{
switch (element.ImageAlignment)
{
case ImageAlignment.Left:
textField.LeftViewMode = UITextFieldViewMode.Always;
textField.LeftView = GetImageView(element.Image, element.ImageHeight, element.ImageWidth);
break;
case ImageAlignment.Right:
textField.RightViewMode = UITextFieldViewMode.Always;
textField.RightView = GetImageView(element.Image, element.ImageHeight, element.ImageWidth);
break;
}
}
this.Control.Layer.CornerRadius = 25;
textField.BorderStyle = UITextBorderStyle.None;
textField.Alpha = 1;
CALayer bottomBorder = new CALayer
{
Frame = new CGRect(0.0f, element.HeightRequest - 1, this.Frame.Width, 1.0f),
BorderWidth = 2.0f,
BorderColor = element.LineColor.ToCGColor()
};
textField.Layer.AddSublayer(bottomBorder);
textField.Layer.MasksToBounds = true;
}
but this is what I'm getting

Line break in date axis with amcharts

As you can see here http://allopensensors.com/profile/andreas/
the date on x-axis is nonreadable. I'd like to add a line break. How can i solve this?
AmCharts.ready(function () {
// SERIAL CHART
chart = new AmCharts.AmSerialChart();
chart.pathToImages = "http://allopensensors.com/amcharts/images/";
chart.dataProvider = chartData;
chart.marginLeft = 10;
chart.categoryField = "year";
chart.dataDateFormat = "YYYY-MM-DD JJ:NN:SS";
// listen for "dataUpdated" event (fired when chart is inited) and call zoomChart method when it happens
chart.addListener("dataUpdated", zoomChart);
// AXES
// category
var categoryAxis = chart.categoryAxis;
// categoryAxis.parseDates = true; // as our data is date-based, we set parseDates to true
categoryAxis.minPeriod = "200"; // our data is yearly, so we set minPeriod to YYYY
categoryAxis.dashLength = 3;
categoryAxis.minorGridEnabled = true;
categoryAxis.minorGridAlpha = 0.1;
// value
var valueAxis = new AmCharts.ValueAxis();
valueAxis.axisAlpha = 0;
valueAxis.inside = true;
valueAxis.dashLength = 3;
chart.addValueAxis(valueAxis);
// GRAPH
graph = new AmCharts.AmGraph();
graph.type = "smoothedLine"; // this line makes the graph smoothed line.
graph.lineColor = "#d1655d";
graph.negativeLineColor = "#637bb6"; // this line makes the graph to change color when it drops below 0
graph.bullet = "round";
graph.bulletSize = 8;
graph.bulletBorderColor = "#FFFFFF";
graph.bulletBorderAlpha = 1;
graph.bulletBorderThickness = 2;
graph.lineThickness = 2;
graph.valueField = "value";
graph.balloonText = "[[category]]<br><b><span style='font-size:14px;'>[[value]]</span></b>";
chart.addGraph(graph);
// CURSOR
var chartCursor = new AmCharts.ChartCursor();
chartCursor.cursorAlpha = 0;
chartCursor.cursorPosition = "mouse";
chartCursor.categoryBalloonDateFormat = "JJ:NN:SS";
chart.addChartCursor(chartCursor);
// SCROLLBAR
var chartScrollbar = new AmCharts.ChartScrollbar();
chart.addChartScrollbar(chartScrollbar);
chart.creditsPosition = "bottom-right";
// WRITE
chart.write("chartdiv");
});
// this method is called when chart is first inited as we listen for "dataUpdated" event
function zoomChart() {
// different zoom methods can be used - zoomToIndexes, zoomToDates, zoomToCategoryValues
// chart.zoomToDates(new Date(1972, 0), new Date(2200, 0));
chart.zoomToIndexes(chartData.length - 40, chartData.length - 1);
}
To make it readable, you can rotate the labels with custom angle. Try categoryAxis.labelRotation : 45
For Reference: http://www.amcharts.com/demos/column-with-rotated-series/
Hope it helps!

CreateJS - Collision detection between two createjs.Containers

I currently have this working in a desktop browser but not on touch devices because I update the variables I need on mouseover. So to get around this I am trying to check for collision detection between two containers and then update the needed variables. The items should snap to the placeholder positions when a collision between the two is detected. The catch is that items and placeholders are placed dynamically any item must be able to snap to any placeholder.
var placeholders,items,selectedItem,collision,startX, startY, snapX, snapY, xpos, ypos;
var stage = new createjs.Stage("canvas");
createjs.Touch.enable(stage);
createjs.Ticker.addEventListener("tick", tick);
function init(){
xpos = 0;
ypos = 120;
container = new createjs.Container();
stage.addChild(container);
placeholders = new createjs.Container();
placeholders.name = "placeholders"
stage.addChild(placeholders);
items = new createjs.Container();
stage.addChild(items);
for(i=0;i<2;i++){
placeholder = new CustomContainer(i, "#ff0000", 100,100);
placeholder.setBounds(0,0,100,100);
placeholder.cursor = "pointer";
placeholder.x = xpos;
placeholder.name = "placeholder"+i
container.addChild(placeholder)
xpos+= (placeholder.getBounds().width + 10);
}
xpos = 0;
for(j=0;j<2;j++){
item = new CustomContainer(j, "#0000ff", 100,100);
item.active = false;
item.setBounds(0,0,100,100);
item.name = "item"+j;
item.x = xpos;
item.y = ypos;
item.startX = xpos;
item.startY = ypos;
container.addChild(item)
item.addEventListener("mousedown", selectItem);
xpos+= (item.getBounds().width + 10);
}
stage.addChild(placeholders,items);
}
function selectItem(evt) {
selectedItem = evt.target.parent;
selectedItem.mouseEnabled = false;
evt.addEventListener("mousemove", function(ev) {
moveItem(ev);
})
evt.addEventListener("mouseup", function(ev) {
selectedItem.mouseEnabled = true;
if(collision){
//New position based on the hitTest
//selectedItem.x = ;
//selectedItem.y = ;
}else{
selectedItem.x = selectedItem.startX;
selectedItem.y = selectedItem.startY;
}
})
}
function moveItem(evt){
pt = placeholders.globalToLocal(stage.mouseX, stage.mouseY);
obj = evt.target.parent;
obj.x = pt.x - 50;
obj.y = pt.y - 50;
//selectedItem collision with placeholder
collision = obj.hitTest(pt.x,pt.y)
}
function tick(evt) {
stage.update();
}
$(document).ready(init());
I am just not getting the hitTest right. You can see the working code below.
http://jsfiddle.net/non_tech_guy/2d68W/4/
The hittest will test pixel-perfect hit. I believe you're looking for a collision test.
Try this: https://github.com/olsn/Collision-Detection-for-EaselJS