PDA

View Full Version : draw RectBorder from code > no data


Ninna76
07-16-2008, 12:06 PM
hi,
- i created a new RectBorder (RectBorder.as & RectBorder.fla placed in the same folder, etc. following info from LiveDocs (http://livedocs.adobe.com/flash/mx2004/main_7_2/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Flash_MX_2004&file=00002742.html), as corrected by MM tech writer)
- instead of creating a graphic manually, i wanted to draw RectBorder from code - done in the RectBorder.as file
- i created a new file (combo.fla), imported ComboBox from StandardComponents and replaced the original RectBorder (Themes/MMDefault/Border Classes) with my own
- then i converted the ComboBox to a compiled clip and copy-pasted that into a new file (test.fla)
having searched high & low i can't find the answer to this, among other things:
the combo instance doesn't populate with values (from var ComboList:Array = [...])

correction: the 0 index value is displayed, but not the following labels when the combo is in a dropdown state

the code i used for the RectBorder.as file:
import mx.core.ext.UIObjectExtensions;
import mx.styles.CSSStyleDeclaration;

class RectBorder extends mx.skins.RectBorder{
static var symbolName:String = "RectBorder";
static var symbolOwner:Object = RectBorder;
var className:String = "RectBorder";
var c = undefined;
var bw:Number = 0;
function RectBorder() {
}
function init(Void):Void {
super.init();
}
function drawBorder(Void):Void {
var z:CSSStyleDeclaration = _global.styles[className];
var d:Number = getStyle(backgroundColorName);
var w:Number = width;
var h:Number = height;
if (d == undefined) d = z[backgroundColorName];
draw3dBorder();
//rect7
if (d != undefined)
{
beginFill(d);
drawRect(5,5,w-5,h-5);
endFill();
}
}
function draw3dBorder(Void):Void {
var w:Number = width;
var h:Number = height;
//rect1
c = 0x483B42;
beginFill(c);
drawRect(0,0,w,h);
endFill();
//rect2
c = 0x71422A;
beginFill(c);
drawRect(1,1,w-1,h-1);
endFill();
//rect3
c = 0xFFCF53;
beginFill(c);
drawRect(2,2,w-2,h-2);
endFill();
//rect4
c = 0xB3843D;
beginFill(c);
drawRect(3,3,w-3,h-3);
endFill();
//rect5
c = 0x693B2B;
beginFill(c);
drawRect(4,4,w-4,h-4);
endFill();
//rect6
c = 0x73BDCE;
beginFill(c);
drawRect(5,5,w-5,h-5);
endFill();
}
// register ourselves as the RectBorder for all components to use
static function classConstruct():Boolean {
UIObjectExtensions.Extensions();
_global.styles.rectBorderClass = RectBorder;
_global.skinRegistry["RectBorder"] = true;
return true;
}
static var classConstructed:Boolean = classConstruct();
static var UIObjectExtensionsDependency = UIObjectExtensions;
}

i have no idea where things went wrong, so i'd really appreciate your help :confused:

regards
ninna

Ninna76
07-16-2008, 04:53 PM
though possibly lacking a bit in understaning as to what i did exactly :o, i modified the Halo theme RectBorder.as (with the prior backup of the original naturally ;) ) and here's what does work:
import mx.skins.Border;
import mx.styles.CSSStyleDeclaration;
import mx.core.ext.UIObjectExtensions;

class mx.skins.halo.RectBorder extends mx.skins.RectBorder {
static var symbolName:String = "RectBorder";
static var symbolOwner:Object = mx.skins.halo.RectBorder;
#include "../../core/ComponentVersion.as"
var borderCapColorName:String = "borderCapColor";
var shadowCapColorName:String = "shadowCapColor";
private var colorList:Object = { highlightColor: 0, borderColor: 0, buttonColor: 0, shadowColor: 0, borderCapColor: 0, shadowCapColor: 0};
private var borderWidths:Object = { none: 5, solid: 5, inset: 5, outset: 5, alert: 5, dropDown: 5, menuBorder: 5, comboNonEdit: 5 };
var drawRoundRect:Function;
function RectBorder() {
}
function init(Void):Void {
borderWidths["default"] = 5;
super.init();
}
function getBorderMetrics(Void):Object {
if (offset == undefined) {
var b:String = getStyle(borderStyleName);
offset = borderWidths[b];
}
if (getStyle(borderStyleName) == "default" || getStyle(borderStyleName) == "alert") {
__borderMetrics = { left: 3, top: 1, right: 3, bottom:3 };
return __borderMetrics;
}
return super.getBorderMetrics();
}
function drawBorder(Void):Void {
var z:CSSStyleDeclaration = _global.styles[className];
if (z == undefined) z = _global.styles.RectBorder;
var b:String = getStyle(borderStyleName);
var c:Number = getStyle(borderColorName);
if (c == undefined) c = z[borderColorName];
var d:Number = getStyle(backgroundColorName);
if (d == undefined) d = z[backgroundColorName];
var e:String = getStyle("backgroundImage");
if (b != "none") {
var f:Number = getStyle(shadowColorName);
if (f == undefined) f = z[shadowColorName];
var g:Number = getStyle(highlightColorName);
if (g == undefined) g = z[highlightColorName];
var h:Number = getStyle(buttonColorName);
if (h == undefined) h = z[buttonColorName];
var i:Number = getStyle(borderCapColorName);
if (i == undefined) i = z[borderCapColorName];
var j:Number = getStyle(shadowCapColorName);
if (j == undefined) j = z[shadowCapColorName];
}
offset = borderWidths[b];
var o = offset;
var ww:Number = width;
var hh:Number = height;
clear();
_color = undefined;
if (b == "none") {
}
else if (b == "inset") {
draw3dBorder();
}
else if (b == "outset") {
draw3dBorder();
}
else if (b == "alert") {
draw3dBorder();
}
else if (b == "default") {
draw3dBorder();
}
else if (b == "dropDown") {
draw3dBorder();
}
else if (b == "menuBorder") {
draw3dBorder();
}
else if (b == "comboNonEdit") {
}
else {
draw3dBorder();
}
if (d != undefined) {
beginFill(d);
drawRect(o,o,width-o,height-o);
endFill();
}
}
function draw3dBorder(c1:Number, c2:Number, c3:Number, c4:Number,c5:Number,c6:Number):Void {
var w:Number = width;
var h:Number = height;
c1 = 0x483B42;
beginFill(c1);
drawRect(0,0,w,h);
endFill();
c2 = 0x71422A;
beginFill(c2);
drawRect(1,1,w-1,h-1);
endFill();
c3 = 0xFFCF53;
beginFill(c3);
drawRect(2,2,w-2,h-2);
endFill();
c4 = 0xB3843D;
beginFill(c4);
drawRect(3,3,w-3,h-3);
endFill();
c5 = 0x693B2B;
beginFill(c5);
drawRect(4,4,w-4,h-4);
endFill();
c6 = 0x73BDCE;
beginFill(c6);
drawRect(5,5,w-5,h-5);
endFill();
}
static function classConstruct():Boolean {
UIObjectExtensions.Extensions();
_global.styles.rectBorderClass = RectBorder;
_global.skinRegistry["RectBorder"] = true;
return true;
}
static var classConstructed:Boolean = classConstruct();
static var UIObjectExtensionsDependency = UIObjectExtensions;
}

whether it's of any use to anybody, i don't know :D