/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġ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 Ġcom . android . tools . idea . nav editor . scene . targets Ċ Ċ import Ġcom . android . tools . idea . common . model . Nl Attributes Holder Ċ import Ġcom . android . tools . idea . common . scene . Scene Ċ import Ġcom . android . tools . idea . common . scene . Scene Component Ċ import Ġcom . android . tools . idea . common . scene . Scene Context Ċ import Ġcom . android . tools . idea . common . scene . target . Drag Base Target Ċ import Ġcom . android . tools . idea . common . scene . target . Legacy Drag Target Ċ import Ġcom . android . tools . idea . common . scene . target . Multi Component Target Ċ import Ġcom . android . tools . idea . common . scene . target . Target Ċ import Ġcom . android . tools . idea . nav editor . model . Nav Coordinate Ċ import Ġcom . android . tools . idea . nav editor . scene . Nav Scene Manager Ċ import Ġorg . intellij . lang . annotations . J dk Constants Ċ import Ġjava . awt . Cursor Ċ import Ġjava . awt . Point Ċ import Ġkotlin . math . absolute Value Ċ Ċ /** Ċ Ġ* ĠImplements Ġa Ġtarget Ġallowing Ġdragging Ġa Ġnav Ġeditor Ġscreen Ċ Ġ*/ Ċ class ĠScreen Drag Target ( component : ĠScene Component ) Ġ: ĠDrag Base Target (), ĠMulti Component Target , ĠLegacy Drag Target Ġ{ ĊĠ Ġprivate Ġval Ġchild Offsets : ĠArray < Point ?> ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġset Component ( component ) ĊĠĠĠ Ġchild Offsets Ġ= ĠarrayOf Null s ( component . children . size ) ĊĠ Ġ} ĊĊĠ Ġ// //////////////////////////////////////////////////////////////////////// /// ĊĠ Ġ// region ĠMouse ĠHandling ĊĠ Ġ// //////////////////////////////////////////////////////////////////////// /// ĊĊĠ Ġoverride Ġfun Ġupdate Attributes ( attributes : ĠN l Attributes Holder , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠ Ġ// ĠNothing ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġmouse Down (@ Nav Coordinate Ġx : ĠInt , Ġ@ Nav Coordinate Ġy : ĠInt ) Ġ{ ĊĠĠĠ Ġsuper < Drag Base Target >. mouse Down ( x , Ġy ) ĊĠĠĠ Ġcomponent . children . forEach Indexed Ġ{ Ġi , Ġchild Ġ-> Ġchild Offsets [ i ] Ġ= ĠPoint ( x Ġ- Ġchild . draw X , Ġy Ġ- Ġchild . draw Y ) Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġmouse Drag (@ Nav Coordinate Ġx : ĠInt , Ġ@ Nav Coordinate Ġy : ĠInt , Ġclosest Target : ĠList < Target >, Ġcontext : ĠScene Context ) Ġ{ ĊĠĠĠ Ġval Ġparent Ġ= Ġmy Component . parent Ġ?: Ġreturn ĊĊĠĠĠ Ġmy Component . is Dragging Ġ= Ġtrue ĊĠĠĠ Ġval Ġdx Ġ= Ġx Ġ- Ġmy Offset X ĊĠĠĠ Ġval Ġdy Ġ= Ġy Ġ- Ġmy Offset Y ĊĊĠĠĠ Ġif Ġ( dx Ġ< Ġparent . draw X Ġ|| Ġdx Ġ+ Ġmy Component . draw Width Ġ> Ġparent . draw X Ġ+ Ġparent . draw Width ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( dy Ġ< Ġparent . draw Y Ġ|| Ġdy Ġ+ Ġmy Component . draw Height Ġ> Ġparent . draw Y Ġ+ Ġparent . draw Height ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġmy Component . setPosition ( dx , Ġdy ) ĊĠĠĠ Ġmy Changed Component Ġ= Ġtrue ĊĊĠĠĠ Ġchild Offsets . forEach Indexed Ġ{ Ġi , Ġoffset Ġ-> ĊĠĠĠĠĠ Ġoffset ?. let Ġ{ Ġcomponent . getChild ( i ). setPosition ( x Ġ- Ġit . x , Ġy Ġ- Ġit . y ) Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġmouse Release (@ Nav Coordinate Ġx : ĠInt , Ġ@ Nav Coordinate Ġy : ĠInt , Ġclosest Targets : ĠList < Target >) Ġ{ ĊĠĠĠ Ġif Ġ(! my Component . is Dragging ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġmy Component . is Dragging Ġ= Ġfalse ĊĠĠĠ Ġif Ġ( my Component . parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ(( x Ġ- Ġmy First Mouse X ). absolute Value Ġ<= Ġ 1 Ġ&& Ġ( y Ġ- Ġmy First Mouse Y ). absolute Value Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ( my Component . scene . scene Manager Ġas ĠNav Scene Manager ). save ( listOf ( my Component )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( my Changed Component ) Ġ{ ĊĠĠĠĠĠ Ġmy Component . scene . mark Needs Layout ( Scene . IM MEDI ATE _ LAYOUT ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Mouse Cursor (@ J dk Constants . Input Event Mask Ġmodifiers Ex : ĠInt ): ĠCursor Ġ= ĠCursor . get Pre defined Cursor ( Cursor . HAND _ CURSOR ) ĊĊĠ Ġ// endregion ĊĠ Ġ// //////////////////////////////////////////////////////////////////////// /// Ċ } Ċ