Listing 11
void draw_with_clips(SWFSprite *movieclip,float ox,float oy,float xr, float yr,double rot,const char *prefix){ double total=std::accumulate(data.begin(),data.end(),0.0, get_value); if(total<=0.0)return; movieclip->add(new SWFAction("_root.createTextField ('mo_txt', 1000,0,0,0,0);_root.mo_txt.autosize=true; / _root.mo_txt.border=true;_root.mo_txt.background=true; / _root.mo_txt.selectable=false;_root.mo_txt._visible=false;")); / size_t cnt=1; for(const_iterator i=data.begin();i!=data.end();++i,++cnt){ double arc=(i->value/total)*M_PI*2; SWFSprite *clip=new SWFSprite(); i->appearance.draw_pie_slice(clip,ox,oy,rot,rot+arc,xr,yr); rot+=arc; clip->nextFrame(); SWFDisplayItem *item=movieclip->add(clip); char name[64]; sprintf(name,"%s%d",prefix,cnt); item->setName(name); char buf[4096]; sprintf(buf,"%s.onRollOver=function() {_root.mo_txt.text='%s';_root.mo_txt._x=_root._xmouse; _root.mo_txt._y=_root._ymouse;_root.mo_txt._visible=true;}; %s.onRollOut=function(){_root.mo_txt._visible=false;}; ",name,i->label.c_str(),name); movieclip->add(new SWFAction(buf)); } }