package Ġcom . example . wan Android . widget . nested Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . Velocity Tracker Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View Configuration Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . core . view .* Ċ import Ġkotlin . math . abs Ċ Ċ /** Ċ Ġ* Ġauthor Ġ: ĠAndroid Ġ è½® åŃĲ åĵ ¥ Ċ Ġ* Ċ Ġ* Ġgithub Ġ: Ġhttps :// github . com / getActivity / Android Project - Kotlin Ċ Ġ* Ċ Ġ* Ġtime Ġ: Ġ 2 0 2 1 / 0 8 / 1 1 Ċ Ġ* Ċ Ġ* Ġdesc Ġ: ĠæĶ¯æĮģ åµ Į å¥Ĺ æ»ļ åĬ¨ çļĦ ĠLinearLayout Ċ Ġ*/ Ċ @ Suppress (" unused ") Ċ class ĠNested LinearLayout Ġ@ Jvm Over loads Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 , Ġdef Style Res : ĠInt Ġ= Ġ 0 ) Ġ: ĊĠĠĠ ĠLinearLayout ( context , Ġattrs , Ġdef Style Attr , Ġdef Style Res ), ĠNested Scrolling Child , ĠNested Scrolling Parent Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠINVALID _ POINTER : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġchild Helper : ĠNested Scrolling Child Helper ĊĠĠĠ Ġprivate Ġval Ġparent Helper : ĠNested Scrolling Parent Helper ĊĠĠĠ Ġprivate Ġval Ġscroll Cons umed : ĠInt Array Ġ= ĠInt Array ( 2 ) ĊĠĠĠ Ġprivate Ġval Ġscroll Offset : ĠInt Array Ġ= ĠInt Array ( 2 ) ĊĠĠĠ Ġprivate Ġval Ġtouch S lop : ĠFloat ĊĠĠĠ Ġprivate Ġval Ġmaximum Velocity : ĠFloat ĊĠĠĠ Ġprivate Ġval Ġminimum Velocity : ĠFloat ĊĠĠĠ Ġprivate Ġvar Ġlast Motion Y : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġactive Pointer Id : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġvelocity Tracker : ĠVe locity Tracker ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġbeing Drag ged : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Will Not Draw ( false ) ĊĠĠĠĠĠĠĠ Ġchild Helper Ġ= ĠNested Scrolling Child Helper ( this ) ĊĠĠĠĠĠĠĠ Ġparent Helper Ġ= ĠNested Scrolling Parent Helper ( this ) ĊĠĠĠĠĠĠĠ Ġis Nested Scrolling Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtouch S lop Ġ= ĠView Configuration . get ( getContext ()). scaled Touch S lop . toFloat () ĊĠĠĠĠĠĠĠ Ġmaximum Velocity Ġ= ĠView Configuration . get ( getContext ()). scaled Maximum Fl ing Velocity . toFloat () ĊĠĠĠĠĠĠĠ Ġminimum Velocity Ġ= ĠView Configuration . get ( getContext ()). scaled Minimum Fl ing Velocity . toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevent : ĠMotion Event Ġ= ĠMotion Event . obtain ( ev ) ĊĠĠĠĠĠĠĠ Ġinit Velocity Tracker IfNot Exists () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( event . action Mask ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Tracker ?. add Movement ( ev ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Motion Y Ġ= Ġevent . y . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Pointer Id Ġ= Ġevent . get Pointer Id ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Nested Scroll ( View Compat . SCROLL _ AXIS _ VERTICAL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ MOVE Ġ-> Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactive Pointer Index : ĠInt Ġ= Ġevent . find Pointer Index ( active Pointer Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( active Pointer Index Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy : ĠInt Ġ= Ġevent . getY ( active Pointer Index ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdelta Y : ĠInt Ġ= Ġlast Motion Y Ġ- Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dispatch Nested Pre Scroll ( 0 , Ġdelta Y , Ġscroll Cons umed , Ġscroll Offset )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Y Ġ-= Ġscroll Cons umed [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . offset Location ( 0 f , Ġscroll Offset [ 1 ]. toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! being Drag ged Ġ&& Ġabs ( last Motion Y Ġ- Ġy ) Ġ> Ġtouch S lop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . parent ?. request Dis allow Intercept Touch Event ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbeing Drag ged Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delta Y Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Y Ġ-= Ġtouch S lop . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Y Ġ+= Ġtouch S lop . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( being Drag ged ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Tracker ?. add Movement ( ev ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Motion Y Ġ= Ġy Ġ- Ġscroll Offset [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dispatch Nested Scroll ( 0 , Ġ 0 , Ġ 0 , Ġdelta Y , Ġscroll Offset )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Motion Y Ġ-= Ġscroll Offset [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . offset Location ( 0 f , Ġscroll Offset [ 1 ]. toFloat ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ CANCEL , ĠMotion Event . ACTION _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( being Drag ged ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Tracker ?. compute Current Velocity ( 1 0 0 0 , Ġmaximum Velocity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinitial Velocity : ĠInt ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Tracker ?. getY Velocity ( active Pointer Id )?. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( initial Velocity Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Velocity Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( abs ( initial Velocity ) Ġ> Ġminimum Velocity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ing With Nested Dispatch (- initial Velocity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Pointer Id Ġ= ĠINVALID _ POINTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Drag () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ POINTER _ DOWN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex : ĠInt Ġ= Ġevent . action Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Motion Y Ġ= Ġevent . getY ( index ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Pointer Id Ġ= Ġevent . get Pointer Id ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMotion Event . ACTION _ POINTER _ UP Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Secondary Pointer Up ( event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Motion Y Ġ= Ġevent . getY ( event . find Pointer Index ( active Pointer Id )). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġevent . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Secondary Pointer Up ( ev : ĠMotion Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpointer Index : ĠInt Ġ= Ġ(( ev . action Ġand ĠMotion Event . ACTION _ POINTER _ INDEX _ MASK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshr ĠMotion Event . ACTION _ POINTER _ INDEX _ SHIFT ) ĊĠĠĠĠĠĠĠ Ġval Ġpointer Id : ĠInt Ġ= Ġev . get Pointer Id ( pointer Index ) ĊĠĠĠĠĠĠĠ Ġif Ġ( pointer Id Ġ== Ġactive Pointer Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Pointer Index : ĠInt Ġ= Ġif Ġ( pointer Index Ġ== Ġ 0 ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Motion Y Ġ= Ġev . getY ( new Pointer Index ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactive Pointer Id Ġ= Ġev . get Pointer Id ( new Pointer Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Tracker ?. clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġend Drag () Ġ{ ĊĠĠĠĠĠĠĠ Ġbeing Drag ged Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġre cycle Velocity Tracker () ĊĠĠĠĠĠĠĠ Ġstop Nested Scroll () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfl ing With Nested Dispatch ( velocity Y : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! dispatch Nested Pre Fl ing ( 0 f , Ġvelocity Y . toFloat ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatch Nested Fl ing ( 0 f , Ġvelocity Y . toFloat (), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Velocity Tracker IfNot Exists () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( velocity Tracker Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvelocity Tracker Ġ= ĠVe locity Tracker . obtain () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġre cycle Velocity Tracker () Ġ{ ĊĠĠĠĠĠĠĠ Ġvelocity Tracker ?. recycle () ĊĠĠĠĠĠĠĠ Ġvelocity Tracker Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest Dis allow Intercept Touch Event ( dis allow Intercept : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dis allow Intercept ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle Velocity Tracker () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . request Dis allow Intercept Touch Event ( dis allow Intercept ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠNested Scrolling Child ĊĠĠĠ Ġoverride Ġfun Ġset Nested Scrolling Enabled ( enabled : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchild Helper . is Nested Scrolling Enabled Ġ= Ġenabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Nested Scrolling Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchild Helper . is Nested Scrolling Enabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Nested Scroll ( axes : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchild Helper . start Nested Scroll ( axes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstop Nested Scroll () Ġ{ ĊĠĠĠĠĠĠĠ Ġchild Helper . stop Nested Scroll () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Nested Scrolling Parent (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchild Helper . has Nested Scrolling Parent () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Nested Scroll ( dx Cons umed : ĠInt , Ġdy Cons umed : ĠInt , Ġdx Un consumed : ĠInt , Ġdy Un consumed : ĠInt , Ġoffset In Window : ĠInt Array ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchild Helper . dispatch Nested Scroll ( dx Cons umed , Ġdy Cons umed , Ġdx Un consumed , Ġdy Un consumed , Ġoffset In Window ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Nested Pre Scroll ( dx : ĠInt , Ġdy : ĠInt , Ġconsumed : ĠInt Array ?, Ġoffset In Window : ĠInt Array ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchild Helper . dispatch Nested Pre Scroll ( dx , Ġdy , Ġconsumed , Ġoffset In Window ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Nested Fl ing ( velocity X : ĠFloat , Ġvelocity Y : ĠFloat , Ġconsumed : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchild Helper . dispatch Nested Fl ing ( velocity X , Ġvelocity Y , Ġconsumed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Nested Pre Fl ing ( velocity X : ĠFloat , Ġvelocity Y : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġchild Helper . dispatch Nested Pre Fl ing ( velocity X , Ġvelocity Y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠNested Scrolling Parent ĊĠĠĠ Ġoverride Ġfun ĠonStart Nested Scroll ( child : ĠView , Ġtarget : ĠView , Ġnested Scroll Axes : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( nested Scroll Axes Ġand ĠView Compat . SCROLL _ AXIS _ VERTICAL ) Ġ!= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nested Scroll Accepted ( child : ĠView , Ġtarget : ĠView , Ġnested Scroll Axes : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġparent Helper . on Nested Scroll Accepted ( child , Ġtarget , Ġnested Scroll Axes ) ĊĠĠĠĠĠĠĠ Ġstart Nested Scroll ( View Compat . SCROLL _ AXIS _ VERTICAL ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop Nested Scroll ( target : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġparent Helper . on Stop Nested Scroll ( target ) ĊĠĠĠĠĠĠĠ Ġstop Nested Scroll () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nested Scroll ( target : ĠView , Ġdx Cons umed : ĠInt , Ġdy Cons umed : ĠInt , Ġdx Un consumed : ĠInt , Ġdy Un consumed : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdispatch Nested Scroll ( dx Cons umed , Ġdy Cons umed , Ġdx Un consumed , Ġdy Un consumed , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nested Pre Scroll ( target : ĠView , Ġdx : ĠInt , Ġdy : ĠInt , Ġconsumed : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdispatch Nested Pre Scroll ( dx , Ġdy , Ġconsumed , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nested Fl ing ( target : ĠView , Ġvelocity X : ĠFloat , Ġvelocity Y : ĠFloat , Ġconsumed : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdispatch Nested Fl ing ( velocity X , Ġvelocity Y , Ġconsumed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Nested Pre Fl ing ( target : ĠView , Ġvelocity X : ĠFloat , Ġvelocity Y : ĠFloat ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdispatch Nested Pre Fl ing ( velocity X , Ġvelocity Y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Nested Scroll Axes (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġparent Helper . nested Scroll Axes ĊĠĠĠ Ġ} Ċ }