Есть приложение в которм используется AdvandcedDataGrid в ячейках которого используется графика. При наведении прорисовывается полупрозрачный прямоугольник в котором будет подсказка.

Код AS3:
package
{
import flash.display.*;
import flash.events.MouseEvent;
import flash.filters.*;
import flash.geom.*;
import mx.containers.Panel;
import mx.controls.TextArea;
import mx.controls.listClasses.IListItemRenderer;
import mx.core.IDataRenderer;
import mx.core.UIComponent;
import mx.events.FlexEvent;
[Event(name="dataChange", type="mx.events.FlexEvent")]
public class SimpleGanttRenderer extends UIComponent implements IDataRenderer, IListItemRenderer {
private var bar:Sprite = new Sprite();
private var popup:Sprite = new Sprite();
private var _data : Object = null;
/* здесь мы получаем исходные данные */
[Bindable("dataChange")]
public function get data():Object {
return _data;
}
public function set data(value:Object):void {
this._data = value;
this.invalidateProperties();
dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
}
override protected function updateDisplayList(w:Number, h:Number):void { /* здесь прорисовываем наш график */
super.updateDisplayList(w, h);
bar.graphics.clear();
if ( _data != null)
{
bar.graphics.lineStyle(1, 0xFF9000, 1);
var r:Rectangle = calculateRectangle(w,h);
// Задаем матрицу градиента
var gradientBoxMatrix:Matrix = new Matrix();
gradientBoxMatrix.createGradientBox(r.width, r.height, Math.PI*2, r.x, r.y);
var xmlData : XML = XML(_data);
var pos:uint;
pos = (255/100)*xmlData.@progress; // Переводим % выполненной работы в % закрашенности прямоугольника
// Градиентом закрашиваем всю работу (желтый) и % выполненной (зеленый)
bar.graphics.beginGradientFill(GradientType.LINEAR, [0x24FF00, 0x24FF00, 0xFFB500, 0xFFB500], [1, 1, 1, 1], [0, pos, pos, 255], gradientBoxMatrix);
// Добавляем эффект отбрасываемой тени
var filter:Array = new Array();
var dFilter:DropShadowFilter = new DropShadowFilter();
dFilter.angle = 45;
dFilter.distance = 4;
dFilter.alpha = .4;
filter.push(dFilter);
bar.graphics.drawRect(r.x, r.y, r.width, r.height); // Рисуем прямоугольник
this.filters = filter;
// Заканчиваем рисование
bar.graphics.endFill();
// Добавляем обработчик когда мышь наведена
bar.addEventListener(MouseEvent.MOUSE_OVER, showPopupBox);
bar.addEventListener(MouseEvent.MOUSE_MOVE, showPopupBox);
bar.addEventListener(MouseEvent.MOUSE_OUT, hidePopupBox);
addChild(bar);
}
}
private function showPopupBox(e:MouseEvent):void
{ // сдесь прорисовываем нашу подсказку
popup.graphics.clear();
var posX:uint = mouseX;
var posY:uint = mouseY;
popup.graphics.lineStyle(1, 0x000000, .2);
popup.graphics.beginFill( 0xFFFFFF, .6);
popup.graphics.drawRoundRectComplex(posX, posY, 150, 100, 5, 5, 5, 5);
popup.graphics.endFill();
addChild(popup);
}
private function hidePopupBox(e:MouseEvent):void
{
popup.graphics.clear();
}
private function calculateRectangle(w:Number, h:Number) : Rectangle {
var xmlData : XML = XML(_data);
var rect_x : int = 1+ ((w-2) * ( xmlData.@start/SimpleGanttUtil.duration )/2);
var rect_y : int = 0;
var rect_width : int = (w-0.2) * ( xmlData.@duration/SimpleGanttUtil.duration )/2;
var rect_height : int = h-1;
return new Rectangle( rect_x, rect_y, rect_width, rect_height );
}
}
}
Проблема заключается в том, что подсказка popup оказывается под объектами bar, а должен отображаться поверх всех объектов. Как это реализовать?
Для наглядности могу выложить скрин, если подскажете как =).