/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 - 2 0 2 1 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġorg . jetbrains . project or . server . core . convert . to Client Ċ Ċ import Ġorg . jetbrains . project or . common . misc . Do Ċ import Ġorg . jetbrains . project or . common . protocol . data . Common Rectangle Ċ import Ġorg . jetbrains . project or . common . protocol . to Client .* Ċ import Ġjava . awt . geom . Affine Transform Ċ import Ġjava . awt . geom . Rectangle 2 D Ċ Ċ public Ġfun Ġ< E > Ġextract Data ( iterable : ĠMutable Iterable < E >): ĠList < E > Ġ{ ĊĠ Ġval Ġanswer Ġ= Ġmutable ListOf < E >() ĊĊĠ Ġiterable . removeAll ( answer :: add ) ĊĊĠ Ġreturn Ġanswer Ċ } Ċ Ċ private Ġfun ĠRectangle 2 D . isVisible ( clip : ĠServer Set Clip Event , Ġtx : ĠServer Set Transform Event ): ĠBoolean Ġ{ ĊĠ Ġval Ġclip Rect Ġ= Ġclip . shape Ġas ? ĠCommon Rectangle Ġ?: Ġreturn Ġtrue Ġ Ġ// Ġcan 't Ġtell ĊĠ Ġval Ġidentity Transform Str Bounds Ġ= ĠAff ine Transform ( tx . tx . toDouble Array ()). create Trans formed Shape ( this ) ĊĊĠ Ġreturn Ġidentity Transform Str Bounds . intersect s ( clip Rect . x , Ġclip Rect . y , Ġclip Rect . width , Ġclip Rect . height ) Ċ } Ċ Ċ private Ġfun ĠServer Draw String Event . isVisible ( font : ĠServer Set Font Event ?, Ġclip : ĠServer Set Clip Event ?, Ġtx : ĠServer Set Transform Event ?): ĠBoolean Ġ{ ĊĠ Ġif Ġ( font Ġ== Ġnull Ġ|| Ġclip Ġ== Ġnull Ġ|| Ġtx Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġreturn Ġtrue Ġ Ġ// Ġcan 't Ġtell ĊĠ Ġ} ĊĊĠ Ġval Ġheight Ġ= Ġfont . fontSize Ġ* Ġ 3 Ġ Ġ// Ġtodo : Ġit 's Ġrough Ġrounding Ġup ĊĊĠ Ġval Ġstr Bounds Ġ= ĠRectangle 2 D . Double ( ĊĠĠĠ Ġthis . x , ĊĠĠĠ Ġthis . y Ġ- Ġheight , ĊĠĠĠ Ġthis . desired Width , ĊĠĠĠĠ 2 . 0 Ġ* Ġheight , ĊĠ Ġ) ĊĊĠ Ġreturn Ġstr Bounds . isVisible ( clip , Ġtx ) Ċ } Ċ Ċ private Ġfun ĠServer Paint Rect Event . isVisible ( clip : ĠServer Set Clip Event ?, Ġtx : ĠServer Set Transform Event ?): ĠBoolean Ġ{ ĊĠ Ġif Ġ( clip Ġ== Ġnull Ġ|| Ġtx Ġ== Ġnull ) Ġ{ ĊĠĠĠ Ġreturn Ġtrue Ġ Ġ// Ġcan 't Ġtell ĊĠ Ġ} ĊĊĠ Ġval Ġstr Bounds Ġ= ĠRectangle 2 D . Double ( ĊĠĠĠ Ġthis . x , ĊĠĠĠ Ġthis . y , ĊĠĠĠ Ġthis . width , ĊĠĠĠ Ġthis . height , ĊĠ Ġ) ĊĊĠ Ġreturn Ġstr Bounds . isVisible ( clip , Ġtx ) Ċ } Ċ Ċ public Ġfun ĠList < List < Server Window Event >> . convertTo Simple List (): ĠList < Server Window Event > Ġ{ ĊĠ Ġval Ġanswer Ġ= Ġmutable ListOf < Server Window Event >() ĊĊĠ Ġvar Ġlast Composite Event : ĠServer Set Composite Event ? Ġ= Ġnull ĊĠ Ġvar Ġlast Clip Event : ĠServer Set Clip Event ? Ġ= Ġnull ĊĠ Ġvar Ġlast Transform Event : ĠServer Set Transform Event ? Ġ= Ġnull ĊĠ Ġvar Ġlast Font Event : ĠServer Set Font Event ? Ġ= Ġnull ĊĠ Ġvar Ġlast Set Paint Event : ĠServer Set Paint Event ? Ġ= Ġnull ĊĠ Ġvar Ġlast Stroke Event : ĠServer Set Stroke Event ? Ġ= Ġnull ĊĊĠ Ġthis . forEach Ġ{ Ġpacked Events Ġ-> ĊĠĠĠ Ġpacked Events . forEach Ġinner Loop @{ Ġevent Ġ-> ĊĠĠĠĠĠ ĠDo Ġex haustive Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠServer Window State Event Ġ-> ĠDo Ġex haustive Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġis ĠServer Set Composite Event Ġ-> Ġif Ġ( event Ġ== Ġlast Composite Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Composite Event Ġ= Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanswer . add ( event ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġis ĠServer Set Clip Event Ġ-> Ġif Ġ( event Ġ== Ġlast Clip Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Clip Event Ġ= Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanswer . add ( event ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġis ĠServer Set Transform Event Ġ-> Ġif Ġ( event Ġ== Ġlast Transform Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Transform Event Ġ= Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanswer . add ( event ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġis ĠServer Set Paint Event Ġ-> Ġif Ġ( event Ġ== Ġlast Set Paint Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Set Paint Event Ġ= Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanswer . add ( event ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġis ĠServer Set Font Event Ġ-> Ġif Ġ( event Ġ== Ġlast Font Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Font Event Ġ= Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanswer . add ( event ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġis ĠServer Set Stroke Event Ġ-> Ġif Ġ( event Ġ== Ġlast Stroke Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Stroke Event Ġ= Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanswer . add ( event ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġis ĠServer Window ToDo State Event Ġ-> Ġanswer . add ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis ĠServer Window Paint Event Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġvisible Ġ= Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠServer Draw String Event Ġ-> Ġevent . isVisible ( last Font Event , Ġlast Clip Event , Ġlast Transform Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠServer Paint Rect Event Ġ-> Ġevent . isVisible ( last Clip Event , Ġlast Transform Event ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanswer . add ( event ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġwhile Ġ( answer . isNotEmpty () Ġ&& Ġanswer . last () Ġis ĠServer Window State Event ) Ġ{ ĊĠĠĠ Ġanswer . remove Last () ĊĠ Ġ} ĊĊĠ Ġreturn Ġanswer Ċ } Ċ