/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 0 5 - 2 0 2 1 ĠRad iance ĠK ir ill ĠGro uch nik ov . ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ Ġo ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ Ġo ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* ĠĠĠ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ Ġo ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġholder Ġnor Ġthe Ġnames Ġof Ċ Ġ* ĠĠĠ Ġits Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ċ Ġ* ĠĠĠ Ġfrom Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , Ċ Ġ* ĠTHE ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR Ċ Ġ* ĠPURPOSE ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠOWNER ĠOR Ċ Ġ* ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , Ċ Ġ* ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , Ċ Ġ* ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; Ċ Ġ* ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE Ċ Ġ* ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , Ċ Ġ* ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġorg . push ing pixels . tools . elect ra Ċ Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . swing . Swing Ċ import Ġorg . push ing pixels . meteor . add Delayed ActionListener Ċ import Ġorg . push ing pixels . meteor . add Delayed Mouse Listener Ċ import Ġorg . push ing pixels . meteor . awt . derive By Brightness Ċ import Ġorg . push ing pixels . meteor . awt . render Ċ import Ġorg . push ing pixels . neon . api . Neon C ortex Ċ import Ġorg . push ing pixels . sub stance . api . Component State Ċ import Ġorg . push ing pixels . sub stance . api . Sub stance C ortex Ċ import Ġorg . push ing pixels . sub stance . api . Sub stance S lices . Color Scheme Association Kind Ċ import Ġorg . push ing pixels . sub stance . api . skin . Gem ini Skin Ċ import Ġorg . push ing pixels . tools . common . J Image Component Ċ import Ġorg . push ing pixels . tools . common . Rad iance Logo Ċ import Ġjava . awt .* Ċ import Ġjava . awt . geom . Line 2 D Ċ import Ġjavax . swing .* Ċ import Ġjavax . swing . border . Border Ċ import Ġjavax . swing . border . Empty Border Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Swing ) Ġ{ ĊĠĠĠĠĠĠĠ ĠJ Frame . setDefault Look And Feel Decorated ( true ) ĊĠĠĠĠĠĠĠ ĠJ Dialog . setDefault Look And Feel Decorated ( true ) ĊĠĠĠĠĠĠĠ ĠSub stance C ortex . Global Scope . set Skin ( Gem ini Skin ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġelect ra Frame Ġ= ĠJ Frame (" Elect ra ") ĊĠĠĠĠĠĠĠ Ġelect ra Frame . icon Image Ġ= ĠRad iance Logo . getTitle Pane Logo Image () ĊĊĠĠĠĠĠĠĠ Ġelect ra Frame . layout Ġ= ĠGrid Layout ( 1 , Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġj ic Ġ= ĠJ Image Component ( false ) ĊĠĠĠĠĠĠĠ Ġj ic . set Legend ( array Of ("\ t Drag Ġand Ġdrop Ġan Ġimage Ġfile Ġfrom Ġlocal Ġdisk ")) ĊĠĠĠĠĠĠĠ Ġj ic . border Ġ= Ġobject Ġ: ĠBorder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpaint Border ( c : ĠComponent , Ġg : ĠGraphics , Ġx : ĠInt , Ġy : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . render Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠborderColor Scheme Ġ= ĠSub stance C ortex . Component Scope . getCurrent Skin ( c ). getColor Scheme ( c , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor Scheme Association Kind . BORDER , ĠComponent State . ENABLED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstrokeWidth Ġ= Ġ 1 . 0 f Ġ/ ĠNe on C ortex . get Scale Factor (). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . stroke Ġ= ĠBasic Stroke ( stroke Width , ĠBasic Stroke . CAP _ B UT T , ĠBasic Stroke . JOIN _ ROUND ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . color Ġ= ĠborderColor Scheme . mid Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleft X Ġ= Ġx Ġ+ Ġwidth Ġ- Ġ 1 Ġ- ĠstrokeWidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . draw ( Line 2 D . Float ( left X , Ġy . toFloat (), Ġleft X , Ġ( y Ġ+ Ġheight ). toFloat ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . composite Ġ= ĠAlpha Composite . Src Over . derive ( 0 . 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġright X Ġ= Ġleft X Ġ+ ĠstrokeWidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . color Ġ= ĠborderColor Scheme . extra Light Color . derive By Brightness ( 0 . 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . draw ( Line 2 D . Float ( right X , Ġy . toFloat (), Ġright X , Ġ( y Ġ+ Ġheight ). toFloat ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Border Opaque (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Border Insets ( c : ĠComponent ): ĠIn sets Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIn sets ( 0 , Ġ 0 , Ġ 0 , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelect ra Frame . add ( j ic ) ĊĊĠĠĠĠĠĠĠ Ġval Ġelect r ified Image Component Ġ= ĠJ Elect r ified Image Component ( j ic ) ĊĠĠĠĠĠĠĠ Ġval Ġelect r ified Container Ġ= ĠJPanel ( Border Layout ()) ĊĠĠĠĠĠĠĠ Ġval Ġsc roller Ġ= ĠJ ScrollPane ( elect r ified Image Component , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ScrollPane . VERTICAL _ SCROLL BAR _ AS _ NE EDED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ ScrollPane . HORIZONTAL _ SCROLL BAR _ NE VER ) ĊĠĠĠĠĠĠĠ Ġsc roller . border Ġ= ĠEmpty Border ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġelect r ified Container . add ( sc roller , ĠBorderLayout . CENTER ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsave Elect r ified Ġ= ĠJButton (" save ") ĊĠĠĠĠĠĠĠ Ġsave Elect r ified . add Delayed ActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal File Ġ= Ġj ic . original File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( original File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelect r ified Image Component . save ( original File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcontrols Ġ= ĠJPanel ( Flow Layout ( Flow Layout . TR AIL ING )) ĊĠĠĠĠĠĠĠ Ġcontrols . add ( save Elect r ified ) ĊĠĠĠĠĠĠĠ Ġelect r ified Container . add ( controls , ĠBorderLayout . SO UTH ) ĊĊĠĠĠĠĠĠĠ Ġelect ra Frame . add ( elect r ified Container ) ĊĊĠĠĠĠĠĠĠ Ġj ic . add Delayed Mouse Listener ( on Mouse Clicked Ġ= Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e !!. click Count Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabs Point Ġ= Ġj ic . to Original Image Coords ( e . x , Ġe . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelect r ified Image Component . add Zoom Bubble ( abs Point . x , Ġabs Point . y , Ġ 8 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġelect ra Frame . setSize ( 1 2 0 0 , Ġ 8 0 0 ) ĊĠĠĠĠĠĠĠ Ġelect ra Frame . setLocation Relative To ( null ) ĊĠĠĠĠĠĠĠ Ġelect ra Frame . default Close Operation Ġ= ĠJ Frame . EXIT _ ON _ CLOSE ĊĊĠĠĠĠĠĠĠ Ġelect ra Frame . isVisible Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ