package Ġme . ore . swing . ext Ċ Ċ import Ġjava . awt . Component Ċ import Ġjava . awt . Rectangle Ċ import Ġjava . awt . Window Ċ import Ġjava . awt . image . Buffered Image Ċ import Ġjavax . swing . J Component Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . min ĊĊ Ċ /** Ċ Ġ* ĠMis cellaneous Ġutility Ġmethods Ċ Ġ*/ Ċ object ĠO re Swing Ext Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠError Ġhandling ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠT ries Ġto Ġhandle Ġthe Ġerror Ġby Ġiter ating Ġover Ġthe Ġoptions : ĊĠĠĠĠ Ġ* Ġ* Ġerror Ġhandling Ġwith Ġ[ Thread . unc a ught ExceptionHandler ] Ġof Ġthe Ġcurrent Ġthread ĊĠĠĠĠ Ġ* Ġ* Ġerror Ġhandling Ġwith Ġ[ Thread . default Un caught ExceptionHandler ] ĊĠĠĠĠ Ġ* Ġ* Ġerror Ġoutput Ġwith Ġ[ Throwable . printStackTrace ] Ġ([ System . err ]) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠAfter Ġthe Ġfirst Ġvariant Ġthat Ġworked , Ġit Ġabort s Ġthe Ġexecution ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġthread - safe ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġexception ĠError Ġto Ġhandle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhandle ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthread Ġ= ĠThread . currentThread () ĊĠĠĠĠĠĠĠ Ġvar Ġprocessed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// Ġregion ĠUse Ġhandler Ġof Ġcurrent Ġthread ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread . unc a ught ExceptionHandler ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . unc a ught Exception ( thread , Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . add Sup pressed ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġend region ĊĠĠĠĠĠĠĠ Ġif Ġ( processed ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// Ġregion ĠUse Ġdefault Ġhandler ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . getDefault Un caught ExceptionHandler ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . unc a ught Exception ( thread , Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexception . add Sup pressed ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġend region ĊĠĠĠĠĠĠĠ Ġif Ġ( processed ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// ĠWrite Ġto Ġconsole ĊĠĠĠĠĠĠĠ Ġexception . printStackTrace ( System . err ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGetting Ġthe Ġwindow Ġthe Ġcomponent Ġbelongs Ġto ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠMethod Ġmust Ġbe Ġexecuted Ġin Ġ[ EventQueue . dispatch Thread ][ java . awt . EventQueue . dispatch Thread ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcomponent ĠThe Ġcomponent Ġto Ġget Ġthe Ġwindow Ġfor ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġwindow Ġthis Ġcomponent Ġbelongs Ġto ; Ġ` null ` Ġif Ġthe Ġcomponent Ġdoes Ġnot Ġbelong Ġto Ġany Ġwindow ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Window Of ( component : ĠComponent ): ĠWindow ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent : ĠComponent ? Ġ= Ġcomponent ĊĠĠĠĠĠĠĠ Ġwhile Ġ( current Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġis ĠWindow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġcurrent . parent ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcomponent Ġimage ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġimage Ġwill Ġbe Ġthe Ġsame Ġsize Ġas Ġthe Ġcomponent ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ_ Note : Ġcomponents Ġthat Ġare Ġnot Ġyet Ġrendered Ġin Ġsome Ġwindow Ġcan Ġhave Ġzero Ġwidth Ġand / or Ġheight _ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠMethod Ġmust Ġbe Ġexecuted Ġin Ġ[ EventQueue . dispatch Thread ][ java . awt . EventQueue . dispatch Thread ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcomponent ĠThe Ġcomponent Ġto Ġget Ġthe Ġimage Ġfor ĊĠĠĠĠ Ġ* Ġ@ param Ġimage Type ĠImage Ġtype ; Ġmust Ġbe Ġone Ġof Ġthe Ġ[ Buffered Image ]. ` TYPE _* ` Ġconstants ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠComponent Ġimage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Member Visibility Can Be Private ") ĊĠĠĠ Ġfun ĠgetImage Of ( component : ĠJ Component , Ġimage Type : ĠInt Ġ= ĠBufferedImage . TYPE _ INT _ ARGB ): ĠBufferedImage Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġcomponent . size ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġsize . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġsize . height ĊĠĠĠĠĠĠĠ Ġif Ġ(( width Ġ== Ġ 0 ) Ġ|| Ġ( height Ġ== Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBufferedImage ( width , Ġheight , Ġimage Type ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠBufferedImage ( width , Ġheight , Ġimage Type ) ĊĠĠĠĠĠĠĠ Ġval Ġgraphics Ġ= Ġresult . create Graphics () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Cannot Ġcreate Ġgraphics Ġfor Ġresult Ġimage ") ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent . paint ( graphics ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics . dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġan Ġimage Ġof Ġa Ġpart Ġof Ġa Ġcomponent ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġimage Ġwill Ġhave Ġthe Ġsize Ġand Ġcontent Ġof Ġthe Ġ" intersection " Ġof Ġthe Ġcomponent 's Ġdimensions Ġand Ġ[ bounds ], ĊĠĠĠĠ Ġ* Ġi . e . Ġimage Ġsize Ġand Ġcontent Ġmay Ġbe Ġsmaller Ġthan Ġ[ bounds ] Ġif Ġ[ bounds ] Ġis Ġoutside Ġthe Ġcomponent 's Ġbounds ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ_ Note : Ġcomponents Ġthat Ġare Ġnot Ġyet Ġrendered Ġin Ġsome Ġwindow Ġcan Ġhave Ġzero Ġwidth Ġand / or Ġheight _ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠMethod Ġmust Ġbe Ġexecuted Ġin Ġ[ EventQueue . dispatch Thread ][ java . awt . EventQueue . dispatch Thread ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcomponent ĠThe Ġcomponent Ġto Ġget Ġthe Ġimage Ġfor ĊĠĠĠĠ Ġ* Ġ@ param Ġbounds ĠBounds Ġof Ġthe Ġpart Ġof Ġthe Ġcomponent Ġthat Ġneeds Ġto Ġbe Ġincluded Ġin Ġthe Ġimage ĊĠĠĠĠ Ġ* Ġ@ param Ġimage Type ĠImage Ġtype ; Ġmust Ġbe Ġone Ġof Ġthe Ġ[ Buffered Image ]. ` TYPE _* ` Ġconstants ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠImage Ġof Ġa Ġpart Ġof Ġa Ġcomponent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetImage Of ( component : ĠJ Component , Ġbounds : ĠRectangle , Ġimage Type : ĠInt Ġ= ĠBufferedImage . TYPE _ INT _ ARGB ): ĠBufferedImage Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġbounds . width ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġbounds . height ĊĠĠĠĠĠĠĠ Ġif Ġ(( width Ġ== Ġ 0 ) Ġ|| Ġ( height Ġ== Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBufferedImage ( width , Ġheight , Ġimage Type ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfull Image Ġ= Ġthis . getImage Of ( component , Ġimage Type ) ĊĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġbounds . x ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġbounds . y ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Width Ġ= Ġmax ( min ( bounds . width , Ġfull Image . width Ġ- Ġx ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Height Ġ= Ġmax ( min ( bounds . height , Ġfull Image . height Ġ- Ġy ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ(( actual Width Ġ== Ġ 0 ) Ġ|| Ġ( actual Height Ġ== Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBufferedImage ( actual Width , Ġactual Height , Ġimage Type ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠBufferedImage ( actual Width , Ġactual Height , Ġimage Type ) ĊĠĠĠĠĠĠĠ Ġval Ġgraphics Ġ= Ġresult . create Graphics () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Cannot Ġcreate Ġgraphics Ġfor Ġresult Ġimage ") ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics . drawImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Image , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ 0 , Ġactual Width , Ġactual Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx , Ġy , Ġx Ġ+ Ġactual Width , Ġy Ġ+ Ġactual Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics . dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTODO Ġdoc ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġinline Ġfun Ġ< T > Ġprint Time ( log Prefix : ĠString ? Ġ= Ġnull , Ġlog Suffix : ĠString ? Ġ= Ġnull , Ġblock : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtime Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġblock () ĊĊĠĠĠĠĠĠĠ Ġtime Ġ= ĠSystem . currentTimeMillis () Ġ- Ġtime ĊĠĠĠĠĠĠĠ Ġprintln ( build String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( log Prefix Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . append ( log Prefix ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Word Ġ= Ġif Ġ( log Prefix . isNull Or Blank ()) Ġ{ Ġ" Elapsed " Ġ} Ġelse Ġ{ Ġ" elapsed " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( first Word ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġtime Ġ- Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġms ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( log Suffix Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . append ( log Suffix ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } Ċ