blob: 780f13ab5652d2ed12fc289f3a9326301f93cdf3 [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 comps
{
import flash.display.DisplayObject;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.geom.Rectangle;
import spark.primitives.Rect;
import flash.geom.Point;
public class Diamond extends Rect
{
public function Diamond()
{
super();
invalidateSize();
}
override protected function measure():void
{
super.measure();
measuredX = - naturalWidth / 2;
measuredY = - naturalHeight / 2;
measuredWidth = naturalWidth;
measuredHeight = naturalHeight;
}
private var _naturalWidth:Number = 100;
public function set naturalWidth(value:Number):void
{
_naturalWidth = Math.max(1, value);
invalidateSize();
}
public function get naturalWidth():Number
{
return _naturalWidth;
}
private var _naturalHeight:Number = 100;
public function set naturalHeight(value:Number):void
{
_naturalHeight = Math.max(1, value);
invalidateSize();
}
public function get naturalHeight():Number
{
return _naturalHeight;
}
private var _drawCircle:Boolean = false;
public function get drawCircle():Boolean
{
return _drawCircle;
}
public function setDrawCircle(draw:Boolean, invalidate:Boolean):void
{
_drawCircle = draw;
if(invalidate)
{
invalidateDisplayList();
}
}
override protected function canSkipMeasurement():Boolean
{
return false;
}
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
//trace("StrokedElement.updateDisplayList w",unscaledWidth,"h",unscaledHeight,"drawnDisplayObject",drawnDisplayObject,"this",this);
if (!drawnDisplayObject || !(drawnDisplayObject is Sprite))
return;
var g:Graphics = (drawnDisplayObject as Sprite).graphics;
// We only clear if we have a displayObject. This handles the case of having our own displayObject and the
// case when we have a mask and have created a _drawnDisplayObject. We don't want to clear if we are
// sharing a display object.
if (displayObject)
g.clear();
// Don't call super.beginDraw() since it will also set up an
// invisible fill.
var bounds:Rectangle = new Rectangle(drawX, drawY, width, height);
if (stroke)
stroke.apply(g, bounds, new Point(bounds.x, bounds.y));
else
g.lineStyle();
if (fill)
fill.begin(g, bounds, new Point(bounds.x, bounds.y));
var left:Number = drawX + measuredX;
var top:Number = drawY + measuredY;
var right:Number = left + unscaledWidth;
var bottom:Number = top + unscaledHeight;
g.moveTo(left, (top + bottom) / 2 );
g.lineTo((left + right) / 2 , top);
g.lineTo(right, (top + bottom) / 2);
g.lineTo((left + right) / 2 , bottom);
g.lineTo(left, (top + bottom) / 2 );
if (fill)
fill.end(g);
if (drawCircle)
{
g.drawCircle((left + right)/2, (top + bottom)/2, Math.min((left+right)/2, (top+bottom)/2));
}
}
}
}