package Ġframework . internal Ċ Ċ import Ġorg . lwjgl . Buffer Utils Ċ import Ġorg . lwjgl . opengl . GL 4 6 C Ċ import Ġorg . lwjgl . st b . ST B Image Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ Ċ private Ġtype alias ĠFloat Pair Ġ= ĠPair < Float , ĠFloat > Ċ Ċ internal Ġclass ĠFont ( font Data : ĠFont Data ) Ġ{ ĊĠĠĠ Ġval Ġtexture ID : ĠInt ĊĠĠĠ Ġ/** ĠTop - left ĠUV Ġmap . Ġ*/ ĊĠĠĠ Ġval Ġorigin UV s : ĠMap < Char , ĠFloat Pair > ĊĠĠĠ Ġ/** ĠBottom - right ĠUV Ġmap . Ġ*/ ĊĠĠĠ Ġval Ġdelta UV s : ĠMap < Char , ĠFloat Pair > ĊĠĠĠ Ġ/** ĠNormal ised Ġquad Ġoffset Ġmap . Ġ*/ ĊĠĠĠ Ġval Ġquad Delta : ĠMap < Char , ĠFloat Pair > ĊĠĠĠ Ġ/** ĠNormal ised Ġquad Ġsize Ġmap . Ġ*/ ĊĠĠĠ Ġval Ġquad Size : ĠMap < Char , ĠFloat Pair > ĊĠĠĠ Ġ/** ĠNormal ised Ġx - advance Ġmap . Ġ*/ ĊĠĠĠ Ġval Ġadv ances : ĠMap < Char , ĠFloat > ĊĠĠĠ Ġ/** ĠOriginal Ġline Ġheight . Ġ*/ ĊĠĠĠ Ġval Ġline Height Ġ= Ġfont Data . line Height ĊĠĠĠ Ġ/** ĠNormal ised Ġbaseline . Ġ*/ ĊĠĠĠ Ġval Ġbaseline Ġ= Ġfont Data . base Ġ/ Ġline Height ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠFiles . read All Bytes ( Paths . get ( font Data . texture Path )) ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠBuffer Utils . create ByteBuffer ( content . size ) ĊĠĠĠĠĠĠĠ Ġbuffer . put ( content ) ĊĠĠĠĠĠĠĠ Ġbuffer . flip () ĊĠĠĠĠĠĠĠ Ġval Ġw Ġ= ĠBuffer Utils . create Int Buffer ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġh Ġ= ĠBuffer Utils . create Int Buffer ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġchannels Ġ= ĠBuffer Utils . create Int Buffer ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠST B Image . st bi _ load _ from _ memory ( buffer , Ġw , Ġh , Ġchannels , ĠST B Image . ST BI _ rgb _ alpha ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException ( ST B Image . st bi _ failure _ reason ()) ĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġw . get () ĊĠĠĠĠĠĠĠ Ġval Ġheight Ġ= Ġh . get () ĊĊĠĠĠĠĠĠĠ Ġtexture ID Ġ= ĠGL 4 6 C . gl Gen Textures () ĊĠĠĠĠĠĠĠ ĠGL 4 6 C . glBind Texture ( GL 4 6 C . GL _ TEXTURE _ 2 D , Ġtexture ID ) ĊĠĠĠĠĠĠĠ ĠGL 4 6 C . gl TexParameter i ( GL 4 6 C . GL _ TEXTURE _ 2 D , ĠGL 4 6 C . GL _ TEXTURE _ MIN _ FILTER , ĠGL 4 6 C . GL _ LINEAR ) ĊĠĠĠĠĠĠĠ ĠGL 4 6 C . gl TexParameter i ( GL 4 6 C . GL _ TEXTURE _ 2 D , ĠGL 4 6 C . GL _ TEXTURE _ MAG _ FILTER , ĠGL 4 6 C . GL _ LINEAR ) ĊĠĠĠĠĠĠĠ ĠGL 4 6 C . gl TexImage 2 D ( GL 4 6 C . GL _ TEXTURE _ 2 D , Ġ 0 , ĠGL 4 6 C . GL _ RGBA , Ġwidth , Ġheight , Ġ 0 , ĠGL 4 6 C . GL _ RGBA , ĠGL 4 6 C . GL _ UNSIGNED _ BYTE , Ġdata ) ĊĠĠĠĠĠĠĠ ĠGL 4 6 C . glBind Texture ( GL 4 6 C . GL _ TEXTURE _ 2 D , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġwrapping ? ĊĊĠĠĠĠĠĠĠ ĠST B Image . st bi _ image _ free ( data ) ĊĊĠĠĠĠĠĠĠ Ġval Ġ_ origin UV s Ġ= Ġmutable Map Of < Char , ĠFloat Pair >() ĊĠĠĠĠĠĠĠ Ġval Ġ_ delta UV s Ġ= Ġmutable Map Of < Char , ĠFloat Pair >() ĊĠĠĠĠĠĠĠ Ġval Ġ_ quad Delta Ġ= Ġmutable Map Of < Char , ĠFloat Pair >() ĊĠĠĠĠĠĠĠ Ġval Ġ_ quad Size Ġ= Ġmutable Map Of < Char , ĠFloat Pair >() ĊĠĠĠĠĠĠĠ Ġval Ġ_ adv ances Ġ= Ġmutable Map Of < Char , ĠFloat >() ĊĠĠĠĠĠĠĠ Ġval Ġsw Ġ= Ġfont Data . scale W . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġsh Ġ= Ġfont Data . scale H . toFloat () ĊĠĠĠĠĠĠĠ Ġval Ġfs Ġ= Ġfont Data . line Height . toFloat () ĊĊĠĠĠĠĠĠĠ Ġfont Data . chars . forEach Ġ{ Ġ( ch , Ġdata ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Ġ= Ġch . to Char () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ origin UV s [ char ] Ġ= Ġdata . x Ġ/ Ġsw Ġto Ġdata . y Ġ/ Ġsh ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ delta UV s [ char ] Ġ= Ġdata . width Ġ/ Ġsw Ġto Ġdata . height Ġ/ Ġsh ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ quad Delta [ char ] Ġ= Ġdata . x Offset Ġ/ Ġfs Ġto Ġdata . y Offset Ġ/ Ġfs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ quad Size [ char ] Ġ= Ġdata . width Ġ/ Ġfs Ġto Ġdata . height Ġ/ Ġfs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ adv ances [ char ] Ġ= Ġdata . x Advance Ġ/ Ġfs ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġorigin UV s Ġ= Ġ_ origin UV s ĊĠĠĠĠĠĠĠ Ġdelta UV s Ġ= Ġ_ delta UV s ĊĠĠĠĠĠĠĠ Ġquad Delta Ġ= Ġ_ quad Delta ĊĠĠĠĠĠĠĠ Ġquad Size Ġ= Ġ_ quad Size ĊĠĠĠĠĠĠĠ Ġadv ances Ġ= Ġ_ adv ances ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturn Ġthe Ġnormal ised Ġwidth Ġof Ġthe Ġtext Ġat Ġa Ġheight Ġof Ġ 1 px . ĠText Ġwidth ĊĠĠĠĠ Ġ* Ġ Ġwill Ġscale Ġlinear ly Ġwith Ġtext Ġheight . Ġ*/ ĊĠĠĠ Ġfun Ġwidth Of ( text : ĠString ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( text . isEmpty ()) Ġreturn Ġ 0 f ĊĠĠĠĠĠĠĠ Ġval Ġadv ances Ġ= Ġtext . drop Last ( 1 ). map Ġ{ Ġadv ances [ it ] Ġ?: Ġ 0 f Ġ}. sum () ĊĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġ( quad Delta [ text . last ()] ?. first Ġ?: Ġ 0 f ) Ġ+ Ġ( quad Size [ text . last ()] ?. first Ġ?: Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġreturn Ġadv ances Ġ+ Ġlast ĊĠĠĠ Ġ} Ċ } Ċ