1
0
Fork 0

Use latest core API and fix FG 2.8 support

This commit is contained in:
Thomas Geymayer 2012-11-18 23:28:53 +01:00
parent 358d6fc754
commit 10c635752a
2 changed files with 67 additions and 40 deletions

View file

@ -736,17 +736,10 @@ var Canvas = {
# @param id Optional id/name for the group
createGroup: func(id = nil)
{
if( size(me.parents) >= 2 )
{
var ghost = me.parents[1].createGroup();
return {
parents: [ Group.new(props.wrapNode(ghost._node_ghost), id),
ghost ]
};
}
else
# Fallback for Canvas instances not based on a ghost
return Group.new([me.texture, "group"], id);
var ghost = me.parents[1].createGroup();
return {
parents: [ Group.new(props.wrapNode(ghost._node_ghost), id), ghost ]
};
},
# Set the background color
#
@ -759,6 +752,14 @@ var Canvas = {
}
};
var wrapCanvas = func(canvas_ghost)
{
return {
parents: [Canvas, canvas_ghost],
texture: props.wrapNode(canvas_ghost._node_ghost)
};
}
# Create a new canvas. Pass parameters as hash, eg:
#
# var my_canvas = canvas.new({
@ -769,11 +770,8 @@ var Canvas = {
# });
var new = func(vals)
{
var m = { parents: [Canvas, _newCanvasGhost()] };
m.texture = props.wrapNode(m._node_ghost);
var m = wrapCanvas(_newCanvasGhost());
m.texture.setValues(vals);
return m;
};
@ -782,30 +780,20 @@ var new = func(vals)
# @param name Name of the canvas
# @return #Canvas, if canvas with #name exists
# nil, otherwise
var get = func(name)
var get = func(arg)
{
var node_canvas = nil;
if( isa(name, props.Node) )
node_canvas = name;
else if( typeof(name) == 'scalar' )
{
foreach(var c; Canvas.property_root.getChildren("texture"))
{
if( c.getValue("name") == name )
node_canvas = c;
}
}
if( isa(arg, props.Node) )
var node = arg;
else if( typeof(arg) == "hash" )
var node = props.Node.new(arg);
else
die("canvas.new: Invalid argument.");
if( node_canvas == nil )
{
debug.warn("Canvas not found: " ~ name);
var canvas_ghost = _getCanvasGhost(node._g);
if( canvas_ghost == nil )
return nil;
}
return {
parents: [Canvas],
texture: node_canvas
};
return wrapCanvas(canvas_ghost);
};
# ------------------------------------------------------------------------------

View file

@ -22,7 +22,7 @@ var setColorNodes = func(obj, name, color)
.setDoubleValue( i < size(color) ? color[i]
: 1 ); # default alpha is 1
}
return obj;
};
@ -56,6 +56,16 @@ Canvas.setStrokeDashArray = func(pattern)
return me;
};
# Create a canvas object from the given node. Used instead of ghost available
# in newer FG versions.
var makeCanvas = func(node)
{
return {
_node_ghost: node._g,
createGroup: func props.wrapNode(me._node_ghost).addChild("group", 0, 0)._g
};
};
# Internal helper for creating a canvas.
#
# @note In 2.9+ this function is replaced by a C++ function. This
@ -63,10 +73,39 @@ Canvas.setStrokeDashArray = func(pattern)
# in other programs.
canvas._newCanvasGhost = func()
{
return {
parents: [Canvas],
texture: Canvas.property_root.addChild("texture", 0, 0)
};
return makeCanvas( Canvas.property_root.addChild("texture", 0, 0) );
};
# Internal helper for retrieving an existing canvas.
#
canvas._getCanvasGhost = func(arg_ghost)
{
var arg = props.wrapNode(arg_ghost);
# get a canvas specified by its root node
if( Canvas.property_root.getPath() == arg.getParent().getPath() )
var node = Canvas.property_root.getChild("texture", arg.getIndex());
# get a canvas by its name
else if( (var name = arg.getChild("name")) != nil )
{
name = name.getValue();
var node = nil;
foreach(var c; Canvas.property_root.getChildren("texture"))
{
if( c.getValue("name") == name )
node_canvas = c;
}
}
# get a canvas by its index
else if( (var index = arg.getChild("index")) != nil )
var node = Canvas.property_root.getChild("texture", index.getValue());
if( node == nil )
return nil;
return makeCanvas( node );
};
print("Canvas API: FlightGear 2.8 backward support loaded.");