package Ġimg ui . img ui . demo Ċ Ċ import Ġgli _. has Ċ import Ġglm _. c Ċ import Ġglm _. f Ċ import Ġglm _. i Ċ import Ġglm _. vec 2 . Vec 2 Ċ import Ġglm _. vec 4 . Vec 4 Ċ import Ġimg ui .* Ċ import Ġimg ui . ImGui ._ begin Ċ import Ġimg ui . ImGui . align Text To Frame Padding Ċ import Ġimg ui . ImGui . begin Child Ċ import Ġimg ui . ImGui . begin Group Ċ import Ġimg ui . ImGui . bullet Ċ import Ġimg ui . ImGui . bullet Text Ċ import Ġimg ui . ImGui . button Ċ import Ġimg ui . ImGui . checkbox Ċ import Ġimg ui . ImGui . color Edit Vec 4 Ċ import Ġimg ui . ImGui . columns Ċ import Ġimg ui . ImGui . combo Ċ import Ġimg ui . ImGui . cursor Screen Pos Ċ import Ġimg ui . ImGui . drag Float Ċ import Ġimg ui . ImGui . drag Int Ċ import Ġimg ui . ImGui . dummy Ċ import Ġimg ui . ImGui . end Ċ import Ġimg ui . ImGui . end Child Ċ import Ġimg ui . ImGui . end Group Ċ import Ġimg ui . ImGui . frame Count Ċ import Ġimg ui . ImGui . frame Height With Spacing Ċ import Ġimg ui . ImGui . image Ċ import Ġimg ui . ImGui . input Float Ċ import Ġimg ui . ImGui . io Ċ import Ġimg ui . ImGui . is Mouse Hover ing Rect Ċ import Ġimg ui . ImGui . log Buttons Ċ import Ġimg ui . ImGui . log Finish Ċ import Ġimg ui . ImGui . log To Clipboard Ċ import Ġimg ui . ImGui . menuItem Ċ import Ġimg ui . ImGui . next Column Ċ import Ġimg ui . ImGui . pop Font Ċ import Ġimg ui . ImGui . pop Id Ċ import Ġimg ui . ImGui . pop Item Width Ċ import Ġimg ui . ImGui . pop Style Var Ċ import Ġimg ui . ImGui . push Font Ċ import Ġimg ui . ImGui . push Id Ċ import Ġimg ui . ImGui . push Item Width Ċ import Ġimg ui . ImGui . push Style Var Ċ import Ġimg ui . ImGui . radioButton Ċ import Ġimg ui . ImGui . same Line Ċ import Ġimg ui . ImGui . selectable Ċ import Ġimg ui . ImGui . separator Ċ import Ġimg ui . ImGui . set Next Window Bg Alpha Ċ import Ġimg ui . ImGui . set Next Window Pos Ċ import Ġimg ui . ImGui . set Next Window Size Ċ import Ġimg ui . ImGui . set Next Window Size Constraints Ċ import Ġimg ui . ImGui . set Scroll Here Ċ import Ġimg ui . ImGui . setWindow Font Scale Ċ import Ġimg ui . ImGui . setWindow Size Ċ import Ġimg ui . ImGui . show Font Selector Ċ import Ġimg ui . ImGui . show Style Selector Ċ import Ġimg ui . ImGui . show UserGuide Ċ import Ġimg ui . ImGui . slider Float Ċ import Ġimg ui . ImGui . slider Int Ċ import Ġimg ui . ImGui . slider Vec 2 Ċ import Ġimg ui . ImGui . spacing Ċ import Ġimg ui . ImGui . style Ċ import Ġimg ui . ImGui . text Ċ import Ġimg ui . ImGui . text Un formatted Ċ import Ġimg ui . ImGui . text Wrapped Ċ import Ġimg ui . ImGui . time Ċ import Ġimg ui . ImGui . tree Node Ċ import Ġimg ui . ImGui . tree Pop Ċ import Ġimg ui . ImGui . version Ċ import Ġimg ui . ImGui . window Draw List Ċ import Ġimg ui . ImGui . window Width Ċ import Ġimg ui . functional Programming . button Ċ import Ġimg ui . functional Programming . coll ap sing Header Ċ import Ġimg ui . functional Programming . main MenuBar Ċ import Ġimg ui . functional Programming . menu Ċ import Ġimg ui . functional Programming . menu Bar Ċ import Ġimg ui . functional Programming . menuItem Ċ import Ġimg ui . functional Programming . popup Context Item Ċ import Ġimg ui . functional Programming . popup Context Window Ċ import Ġimg ui . functional Programming . small Button Ċ import Ġimg ui . functional Programming . tree Node Ċ import Ġimg ui . functional Programming . with Child Ċ import Ġimg ui . functional Programming . with Id Ċ import Ġimg ui . functional Programming . with Item Width Ċ import Ġimg ui . functional Programming . with Tooltip Ċ import Ġimg ui . functional Programming . with Window Ċ import Ġimg ui . img ui . img ui _ demo Debug Inform ations . Companion . show Example Menu File Ċ import Ġimg ui . img ui . img ui _ demo Debug Inform ations . Companion . show Help Marker Ċ import Ġjava . util .* Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . sqrt Ċ import Ġkotlin . reflect . K Mutable Property 0 Ċ import Ġimg ui . Color Edit Flags Ġas ĠC ef Ċ import Ġimg ui . Input Text Flags Ġas ĠIt f Ċ import Ġimg ui . Selectable Flags Ġas ĠS f Ċ import Ġimg ui . TreeNode Flags Ġas ĠT nf Ċ import Ġimg ui . Window Flags Ġas ĠW f Ċ Ċ object ĠExample App Ġ{ ĊĊĠĠĠ Ġobject Ġshow Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmain MenuBar Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġconsole Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġlog Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġlayout Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġproperty Editor Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġlong Text Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġauto Resize Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġconstr ained Resize Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġfixed Overlay Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġwindow Titles Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġcustom Rendering Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġstyle Editor Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġvar Ġmetrics Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġabout Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġno Title bar Ġ= Ġfalse ĊĠĠĠ Ġvar Ġno Scrollbar Ġ= Ġfalse ĊĠĠĠ Ġvar Ġno Menu Ġ= Ġfalse ĊĠĠĠ Ġvar Ġno Move Ġ= Ġfalse ĊĠĠĠ Ġvar Ġno Resize Ġ= Ġfalse ĊĠĠĠ Ġvar Ġno Collapse Ġ= Ġfalse ĊĠĠĠ Ġvar Ġno Close Ġ= Ġfalse ĊĠĠĠ Ġvar Ġno Nav Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġfilter Ġ= ĠText Filter () ĊĊĠĠĠ Ġoperator Ġfun Ġinvoke ( open : ĠK Mutable Property 0 < Boolean > ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġopen Ġ= Ġopen ĊĊĠĠĠĠĠĠĠ Ġif Ġ( show . main MenuBar ) ĠMain MenuBar () ĊĠĠĠĠĠĠĠ Ġif Ġ( show . console ) ĠConsole ( show :: console ) ĊĠĠĠĠĠĠĠ Ġif Ġ( show . log ) ĠLog ( show :: log ) ĊĠĠĠĠĠĠĠ Ġif Ġ( show . layout ) ĠLayout ( show :: layout ) ĊĠĠĠĠĠĠĠ Ġif Ġ( show . property Editor ) ĠProperty Editor ( show :: property Editor ) ĊĠĠĠĠĠĠĠ Ġif Ġ( show . long Text ) ĠLong Text ( show :: long Text ) ĊĠĠĠĠĠĠĠ Ġif Ġ( show . auto Resize ) ĠAuto Resize ( show :: auto Resize ) ĊĠĠĠĠĠĠĠ Ġif Ġ( show . constrained Resize ) ĠCon str ained Resize ( show :: constrained Resize ) ĊĠĠĠĠĠĠĠ Ġif Ġ( show . fixed Overlay ) ĠFixed Overlay ( show :: fixed Overlay ) ĊĠĠĠĠĠĠĠ Ġif Ġ( show . window Titles ) ĠWindow Titles ( show :: window Titles ) ĊĠĠĠĠĠĠĠ Ġif Ġ( show . custom Rendering ) ĠCustom Rendering ( show :: custom Rendering ) ĊĠĠĠĠĠĠĠ Ġif Ġ( show . metrics ) ĠImGui . show Metrics Window ( show :: metrics ) ĊĠĠĠĠĠĠĠ Ġif Ġ( show . style Editor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Window (" Style ĠEditor ", Ġshow :: style Editor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStyle Editor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( show . about ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Window (" About ĠDe ar ĠImGui ", Ġshow :: about , ĠW f . Always Auto Resize . i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" JVM ĠDe ar ĠImGui , Ġ$ version ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseparator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Original Ġby ĠO mar ĠC orn ut , Ġport ed Ġby ĠG i use p pe ĠB arb ier i Ġand Ġall Ġde ar Ġimg ui Ġcontributors .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" De ar ĠImGui Ġis Ġlicensed Ġunder Ġthe ĠMIT ĠLicense , Ġsee ĠLICENSE Ġfor Ġmore Ġinformation .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠD emon strate Ġthe Ġvarious Ġwindow Ġflags . ĠTypically Ġyou Ġwould Ġjust Ġuse Ġthe Ġdefault . ĊĠĠĠĠĠĠĠ Ġvar Ġwindow Flags Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( no Title bar ) Ġwindow Flags Ġ= Ġwindow Flags Ġor ĠW f . No Title Bar ĊĠĠĠĠĠĠĠ Ġif Ġ( no Scrollbar ) Ġwindow Flags Ġ= Ġwindow Flags Ġor ĠW f . No Scrollbar ĊĠĠĠĠĠĠĠ Ġif Ġ(! no Menu ) Ġwindow Flags Ġ= Ġwindow Flags Ġor ĠW f . MenuBar ĊĠĠĠĠĠĠĠ Ġif Ġ( no Move ) Ġwindow Flags Ġ= Ġwindow Flags Ġor ĠW f . No Move ĊĠĠĠĠĠĠĠ Ġif Ġ( no Resize ) Ġwindow Flags Ġ= Ġwindow Flags Ġor ĠW f . No Resize ĊĠĠĠĠĠĠĠ Ġif Ġ( no Collapse ) Ġwindow Flags Ġ= Ġwindow Flags Ġor ĠW f . No Collapse ĊĠĠĠĠĠĠĠ Ġif Ġ( no Close ) Ġopen Ġ= Ġnull Ġ// ĠDon 't Ġpass Ġour Ġbool * Ġto ĠBegin ĊĠĠĠĠĠĠĠ Ġif Ġ( no Nav ) Ġwindow Flags Ġ= Ġwindow Flags Ġor ĠW f . No Nav ĊĠĠĠĠĠĠĠ Ġset Next Window Size ( Vec 2 ( 5 5 0 , Ġ 6 8 0 ), ĠCon d . First Use E ver ) ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ begin (" ImGui ĠDemo ", Ġopen , Ġwindow Flags )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend () ĠĠ Ġ// ĠEarly Ġout Ġif Ġthe Ġwindow Ġis Ġcollapsed , Ġas Ġan Ġoptimization . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// push Item Width ( getWindow Width () Ġ* Ġ 0 . 6 5 f ); ĠĠĠ Ġ// Ġ 2 / 3 Ġof Ġthe Ġspace Ġfor Ġwidget Ġand Ġ 1 / 3 Ġfor Ġlabels ĊĠĠĠĠĠĠĠ Ġpush Item Width (- 1 4 0 ) Ġ// ĠRight Ġalign , Ġkeep Ġ 1 4 0 Ġpixels Ġfor Ġlabels ĊĊĠĠĠĠĠĠĠ Ġtext (" de ar Ġimg ui Ġsays Ġhello . Ġ($ version )") ĊĊĠĠĠĠĠĠĠ Ġ// ĠMenu ĊĠĠĠĠĠĠĠ Ġmenu Bar Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu (" Menu ") Ġ{ Ġshow Example Menu File () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu (" Examples ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Main Ġmenu Ġbar ", Ġ"", ĠExample App . show :: main MenuBar ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Console ", Ġ"", ĠExample App . show :: console ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Log ", Ġ"", ĠExample App . show :: log ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Simple Ġlayout ", Ġ"", ĠExample App . show :: layout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Property Ġeditor ", Ġ"", ĠExample App . show :: property Editor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Long Ġtext Ġdisplay ", Ġ"", ĠExample App . show :: long Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Auto - res izing Ġwindow ", Ġ"", ĠExample App . show :: auto Resize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Constr ained - res izing Ġwindow ", Ġ"", ĠExample App . show :: constrained Resize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Simple Ġoverlay ", Ġ"", ĠExample App . show :: fixed Overlay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Manip ulating Ġwindow Ġtitles ", Ġ"", ĠExample App . show :: window Titles ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Custom Ġrendering ", Ġ"", ĠExample App . show :: custom Rendering ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu (" Help ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Metrics ", Ġ"", ĠExample App . show :: metrics ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Style ĠEditor ", Ġ"", ĠExample App . show :: style Editor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" About ĠDe ar ĠImGui ", Ġ"", ĠExample App . show :: about ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġspacing () ĊĠĠĠĠĠĠĠ Ġcol lap sing Header (" Help ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Wrapped (" This Ġwindow Ġis Ġbeing Ġcreated Ġby Ġthe ĠShow Demo Window () Ġfunction . ĠPlease Ġrefer Ġto Ġthe Ġcode Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" for Ġprogramming Ġreference .\ n \ n User ĠGuide :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow UserGuide () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcol lap sing Header (" Window Ġoptions ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox (" No Ġtitle bar ", Ġ:: no Title bar ); Ġsame Line ( 1 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox (" No Ġscrollbar ", Ġ:: no Scrollbar ); Ġsame Line ( 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox (" No Ġmenu ", Ġ:: no Menu ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox (" No Ġmove ", Ġ:: no Move ); Ġsame Line ( 1 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox (" No Ġresize ", Ġ:: no Resize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox (" No Ġcollapse ", Ġ:: no Collapse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox (" No Ġclose ", Ġ:: no Close ); Ġsame Line ( 1 5 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox (" No Ġnav ", Ġ:: no Nav ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtree Node (" Style ") Ġ{ ĠStyle Editor () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtree Node (" Capture / Logging ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Wrapped (" The Ġlogging ĠAPI Ġredirects Ġall Ġtext Ġoutput Ġso Ġyou Ġcan Ġeasily Ġcapture Ġthe Ġcontent Ġof Ġa Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" window Ġor Ġa Ġblock . ĠTree Ġnodes Ġcan Ġbe Ġautomatically Ġexpanded . ĠYou Ġcan Ġalso Ġcall ĠLog Text () Ġto Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" output Ġdirectly Ġto Ġthe Ġlog Ġwithout Ġa Ġvisual Ġoutput .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Buttons () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwidgets () ĊĊĠĠĠĠĠĠĠ Ġlayout _() ĊĊĠĠĠĠĠĠĠ Ġpop ups And Modal Windows () ĊĊĠĠĠĠĠĠĠ Ġcolumns _() ĊĊĠĠĠĠĠĠĠ Ġcol lap sing Header (" Filtering ĠTODO ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text (" Filter Ġusage :\ n " Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ Ġ\" \" ĠĠĠĠĠĠĠĠ Ġdisplay Ġall Ġlines \ n " Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ Ġ\" xxx \" ĠĠĠĠĠ Ġdisplay Ġlines Ġcontaining Ġ\" xxx \"\ n " Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ Ġ\" xxx , yyy \" Ġ Ġdisplay Ġlines Ġcontaining Ġ\" xxx \" Ġor Ġ\" yyy \"\ n " Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ Ġ\" - xxx \" ĠĠĠĠ Ġhide Ġlines Ġcontaining Ġ\" xxx \""); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . Draw (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar * Ġlines [] Ġ= Ġ{ Ġ" aaa 1 . c ", Ġ" bbb 1 . c ", Ġ" ccc 1 . c ", Ġ" aaa 2 . cpp ", Ġ" bbb 2 . cpp ", Ġ" ccc 2 . cpp ", Ġ" abc . h ", Ġ" hello , Ġworld " Ġ}; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠIM _ ARRAY SIZE ( lines ); Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filter . Pass Filter ( lines [ i ])) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Bullet Text ("% s ", Ġlines [ i ]); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinput Navigation And Focus () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** ĠD emon strate Ġcreating Ġa Ġfullscreen Ġmenu Ġbar Ġand Ġpop ulating Ġit . ĠĠ Ġ*/ Ċ object ĠMain MenuBar Ġ{ ĊĠĠĠ Ġoperator Ġfun Ġinvoke () Ġ= Ġmain MenuBar Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu (" File ") Ġ{ Ġshow Example Menu File () Ġ} ĊĠĠĠĠĠĠĠ Ġmenu (" Edit ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Undo ", Ġ" CTRL + Z ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Redo ", Ġ" CTRL + Y ", Ġfalse , Ġfalse ) Ġ// ĠDisabled Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseparator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Cut ", Ġ" CTRL + X ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Copy ", Ġ" CTRL + C ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Paste ", Ġ" CTRL + V ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠConsole Ġ{ ĊĊĠĠĠ Ġ/** ĠD emon str ating Ġcreating Ġa Ġsimple Ġconsole Ġwindow , Ġwith Ġscrolling , Ġfiltering , Ġcompletion Ġand Ġhistory . ĊĠĠĠĠ Ġ* Ġ ĠFor Ġthe Ġconsole Ġexample , Ġhere Ġwe Ġare Ġusing Ġa Ġmore ĠC ++ Ġlike Ġapproach Ġof Ġdeclaring Ġa Ġclass Ġto Ġhold Ġthe Ġdata Ġand ĊĠĠĠĠ Ġ* Ġ Ġthe Ġfunctions . Ġ Ġ*/ ĊĠĠĠ Ġval Ġconsole Ġ= ĠExample App Console () ĊĊĠĠĠ Ġoperator Ġfun Ġinvoke ( open : ĠK Mutable Property 0 < Boolean >) Ġ= Ġconsole . draw (" Example : ĠConsole ", Ġopen ) ĊĊĠĠĠ Ġclass ĠExample App Console Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġchar ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInput Buf [ 2 5 6 ]; Ċ // ĠĠĠĠĠĠĠ ĠIm Vector < char *> ĠĠĠĠĠĠ ĠItems ; Ċ // ĠĠĠĠĠĠĠ Ġbool ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScroll To Bottom ; Ċ // ĠĠĠĠĠĠĠ ĠIm Vector < char *> ĠĠĠĠĠĠ ĠHistory ; Ċ // ĠĠĠĠĠĠĠ Ġint ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Pos ; ĠĠĠ Ġ// Ġ- 1 : Ġnew Ġline , Ġ 0 .. History . Size - 1 Ġb rowsing Ġhistory . Ċ // ĠĠĠĠĠĠĠ ĠIm Vector < const Ġchar *> ĠCommands ; Ċ // Ċ // ĠĠĠĠĠĠĠ ĠExample App Console () Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠClear Log (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġmemset ( Input Buf , Ġ 0 , Ġsizeof ( Input Buf )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Pos Ġ= Ġ- 1 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠCommands . push _ back (" HELP "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠCommands . push _ back (" HISTORY "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠCommands . push _ back (" CLEAR "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠCommands . push _ back (" CLAS SI FY "); Ġ Ġ// Ġ" classify " Ġis Ġhere Ġto Ġprovide Ġan Ġexample Ġof Ġ" C "+ [ tab ] Ġcomplet ing Ġto Ġ" CL " Ġand Ġdisplaying Ġmatches . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log (" Welcome Ġto ĠImGui !"); Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ~ Example App Console () Ċ // ĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠClear Log (); Ċ // ĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠHistory . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠ Ġfree ( History [ i ]); Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// ĠPort able Ġhelpers Ċ // ĠĠĠĠĠĠĠ Ġstatic Ġint ĠĠ ĠS tric mp ( const Ġchar * Ġstr 1 , Ġconst Ġchar * Ġstr 2 ) ĠĠĠĠĠĠĠĠ Ġ{ Ġint Ġd ; Ġwhile Ġ(( d Ġ= Ġto upper (* str 2 ) Ġ- Ġto upper (* str 1 )) Ġ== Ġ 0 Ġ&& Ġ* str 1 ) Ġ{ Ġstr 1 ++; Ġstr 2 ++; Ġ} Ġreturn Ġd ; Ġ} Ċ // ĠĠĠĠĠĠĠ Ġstatic Ġint ĠĠ ĠStr nic mp ( const Ġchar * Ġstr 1 , Ġconst Ġchar * Ġstr 2 , Ġint Ġn ) Ġ{ Ġint Ġd Ġ= Ġ 0 ; Ġwhile Ġ( n Ġ> Ġ 0 Ġ&& Ġ( d Ġ= Ġto upper (* str 2 ) Ġ- Ġto upper (* str 1 )) Ġ== Ġ 0 Ġ&& Ġ* str 1 ) Ġ{ Ġstr 1 ++; Ġstr 2 ++; Ġn --; Ġ} Ġreturn Ġd ; Ġ} Ċ // ĠĠĠĠĠĠĠ Ġstatic Ġchar * ĠStr dup ( const Ġchar Ġ* str ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġsize _ t Ġlen Ġ= Ġstrlen ( str ) Ġ+ Ġ 1 ; Ġvoid * Ġbuff Ġ= Ġmalloc ( len ); Ġreturn Ġ( char *) memcpy ( buff , Ġ( const Ġvoid *) str , Ġlen ); Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġvoid ĠĠĠ ĠClear Log () Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠItems . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfree ( Items [ i ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠItems . clear (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠScroll To Bottom Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġvoid ĠĠĠ ĠAdd Log ( const Ġchar * Ġfmt , Ġ...) ĠIM _ PRINTF ARGS ( 2 ) Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġchar Ġbuf [ 1 0 2 4 ]; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġva _ list Ġargs ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġva _ start ( args , Ġfmt ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġv snprintf ( buf , ĠIM _ ARRAY SIZE ( buf ), Ġfmt , Ġargs ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbuf [ IM _ ARRAY SIZE ( buf )- 1 ] Ġ= Ġ 0 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġva _ end ( args ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠItems . push _ back ( Str dup ( buf )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠScroll To Bottom Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĊĠĠĠĠĠĠĠ Ġfun Ġdraw ( title : ĠString , Ġopen : ĠK Mutable Property 0 < Boolean >) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Next Window Size ( Vec 2 ( 5 2 0 , Ġ 6 0 0 ), ĠCon d . First Use E ver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(!_ begin ( title , Ġopen )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ ĠAs Ġa Ġspecific Ġfeature Ġguaranteed Ġby Ġthe Ġlibrary , Ġafter Ġcalling Ġbegin () Ġthe Ġlast ĠItem Ġrepresent Ġthe Ġtitle Ġbar . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSo Ġe . g . Ġis Item Hover ed () Ġwill Ġreturn Ġtrue Ġwhen Ġhover ing Ġthe Ġtitle Ġbar . Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHere Ġwe Ġcreate Ġa Ġcontext Ġmenu Ġonly Ġavailable Ġfrom Ġthe Ġtitle Ġbar . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Context Item Ġ{ Ġif Ġ( menuItem (" Close ")) Ġopen . set ( false ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Wrapped (" This Ġexample Ġis Ġnot Ġyet Ġimplemented , Ġyou Ġare Ġwelcome Ġto Ġcontribute ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtext Wrapped (" This Ġexample Ġimplements Ġa Ġconsole Ġwith Ġbasic Ġcolor ing , Ġcompletion Ġand Ġhistory . ĠA Ġmore Ġelabor ate Ġimplementation Ġmay Ġwant Ġto Ġstore Ġentries Ġalong Ġwith Ġextra Ġdata Ġsuch Ġas Ġtimestamp , Ġemitter , Ġetc ."); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text Wrapped (" Enter Ġ' HELP ' Ġfor Ġhelp , Ġpress ĠTAB Ġto Ġuse Ġtext Ġcompletion ."); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġdisplay Ġitems Ġstarting Ġfrom Ġthe Ġbottom Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Small Button (" Add ĠDummy ĠText ")) Ġ{ ĠAdd Log ("% d Ġsome Ġtext ", ĠItems . Size ); ĠAdd Log (" some Ġmore Ġtext "); ĠAdd Log (" display Ġvery Ġimportant Ġmessage Ġhere !"); Ġ} ĠImGui :: Same Line (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Small Button (" Add ĠDummy ĠError ")) Ġ{ ĠAdd Log ("[ error ] Ġsomething Ġwent Ġwrong "); Ġ} ĠImGui :: Same Line (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Small Button (" Clear ")) Ġ{ ĠClear Log (); Ġ} ĠImGui :: Same Line (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbool Ġcopy _ to _ clipboard Ġ= ĠImGui :: Small Button (" Copy "); ĠImGui :: Same Line (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Small Button (" Scroll Ġto Ġbottom ")) ĠScroll To Bottom Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// static Ġfloat Ġt Ġ= Ġ 0 . 0 f ; Ġif Ġ( ImGui :: Get Time () Ġ- Ġt Ġ> Ġ 0 . 0 2 f ) Ġ{ Ġt Ġ= ĠImGui :: Get Time (); ĠAdd Log (" Sp am Ġ% f ", Ġt ); Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Separator (); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Push Style Var ( ImGui Style Var _ Frame Padding , ĠIm Vec 2 ( 0 , 0 )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstatic ĠImGui Text Filter Ġfilter ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . Draw (" Filter Ġ( \" incl ,- ex cl \") Ġ( \" error \") ", Ġ 1 8 0 ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Pop Style Var (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Separator (); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġfloat Ġfooter _ height _ to _ reserve Ġ= ĠImGui :: Get Style (). Item Spacing . y Ġ+ ĠImGui :: Get Frame Height With Spacing (); Ġ// Ġ 1 Ġseparator , Ġ 1 Ġinput Ġtext Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Begin Child (" Scrolling Region ", ĠIm Vec 2 ( 0 , Ġ- footer _ height _ to _ reserve ), Ġfalse , ĠImGui Window Flags _ Horizontal Scrollbar ); Ġ// ĠLeave Ġroom Ġfor Ġ 1 Ġseparator Ġ+ Ġ 1 ĠInput Text Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Begin Popup Context Window ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Selectable (" Clear ")) ĠClear Log (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: End Popup (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġevery Ġline Ġas Ġa Ġseparate Ġentry Ġso Ġwe Ġcan Ġchange Ġtheir Ġcolor Ġor Ġadd Ġcustom Ġwidgets . ĠIf Ġyou Ġonly Ġwant Ġraw Ġtext Ġyou Ġcan Ġuse ĠImGui :: Text Un formatted ( log . begin (), Ġlog . end ()); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNB - Ġif Ġyou Ġhave Ġthousands Ġof Ġentries Ġthis Ġapproach Ġmay Ġbe Ġtoo Ġin efficient Ġand Ġmay Ġrequire Ġuser - side Ġclipping Ġto Ġonly Ġprocess Ġvisible Ġitems . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠYou Ġcan Ġseek Ġand Ġdisplay Ġonly Ġthe Ġlines Ġthat Ġare Ġvisible Ġusing Ġthe ĠImGui List Clip per Ġhelper , Ġif Ġyour Ġelements Ġare Ġeven ly Ġsp aced Ġand Ġyou Ġhave Ġche ap Ġrandom Ġaccess Ġto Ġthe Ġelements . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTo Ġuse Ġthe Ġclip per Ġwe Ġcould Ġreplace Ġthe Ġ' for Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠItems . Size ; Ġi ++) ' Ġloop Ġwith : Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ ĠImGui List Clip per Ġclip per ( Items . Size ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠ Ġwhile Ġ( clip per . Step ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġclip per . Display Start ; Ġi Ġ< Ġclip per . Display End ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHowever Ġtake Ġnote Ġthat Ġyou Ġcan Ġnot Ġuse Ġthis Ġcode Ġas Ġis Ġif Ġa Ġfilter Ġis Ġactive Ġbecause Ġit Ġbreaks Ġthe Ġ' che ap Ġrandom - access ' Ġproperty . ĠWe Ġwould Ġneed Ġrandom - access Ġon Ġthe Ġpost - filtered Ġlist . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġtypical Ġapplication Ġwant ing Ġco arse Ġclipping Ġand Ġfiltering Ġmay Ġwant Ġto Ġpre - compute Ġan Ġarray Ġof Ġindices Ġthat Ġpassed Ġthe Ġfiltering Ġtest , Ġre computing Ġthis Ġarray Ġwhen Ġuser Ġchanges Ġthe Ġfilter , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġapp ending Ġnewly Ġelements Ġas Ġthey Ġare Ġinserted . ĠThis Ġis Ġleft Ġas Ġa Ġtask Ġto Ġthe Ġuser Ġuntil Ġwe Ġcan Ġmanage Ġto Ġimprove Ġthis Ġexample Ġcode ! Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġyour Ġitems Ġare Ġof Ġvariable Ġsize Ġyou Ġmay Ġwant Ġto Ġimplement Ġcode Ġsimilar Ġto Ġwhat ĠImGui List Clip per Ġdoes . ĠOr Ġsplit Ġyour Ġdata Ġinto Ġfixed Ġheight Ġitems Ġto Ġallow Ġrandom - see king Ġinto Ġyour Ġlist . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Push Style Var ( ImGui Style Var _ Item Spacing , ĠIm Vec 2 ( 4 , 1 )); Ġ// ĠT ight en Ġspacing Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( copy _ to _ clipboard ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Log To Clipboard (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠIm Vec 4 Ġcol _ default _ text Ġ= ĠImGui :: Get Style Color Vec 4 ( ImGui Col _ Text ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠItems . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar * Ġitem Ġ= ĠItems [ i ]; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! filter . Pass Filter ( item )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIm Vec 4 Ġcol Ġ= Ġcol _ default _ text ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str str ( item , Ġ"[ error ] ")) Ġcol Ġ= ĠIm Color ( 1 . 0 f , 0 . 4 f , 0 . 4 f , 1 . 0 f ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( strncmp ( item , Ġ"# Ġ", Ġ 2 ) Ġ== Ġ 0 ) Ġcol Ġ= ĠIm Color ( 1 . 0 f , 0 . 7 8 f , 0 . 5 8 f , 1 . 0 f ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Push Style Color ( ImGui Col _ Text , Ġcol ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text Un formatted ( item ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Pop Style Color (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( copy _ to _ clipboard ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Log Finish (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Scroll To Bottom ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Set Scroll Here (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠScroll To Bottom Ġ= Ġfalse ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Pop Style Var (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: End Child (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Separator (); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCommand - line Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbool Ġre claim _ focus Ġ= Ġfalse ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Input Text (" Input ", ĠInput Buf , ĠIM _ ARRAY SIZE ( Input Buf ), ĠImGui Input Text Flags _ Enter Returns True | ImGui Input Text Flags _ Callback Completion | ImGui Input Text Flags _ Callback History , Ġ& Text Edit Callback Stub , Ġ( void *) this )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar * Ġinput _ end Ġ= ĠInput Buf + strlen ( Input Buf ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( input _ end Ġ> ĠInput Buf Ġ&& Ġinput _ end [- 1 ] Ġ== Ġ' Ġ') Ġ{ Ġinput _ end --; Ġ} Ġ* input _ end Ġ= Ġ 0 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Input Buf [ 0 ]) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExec Command ( Input Buf ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstrcpy ( Input Buf , Ġ""); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre claim _ focus Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠD emon strate Ġkeeping Ġfocus Ġon Ġthe Ġinput Ġbox Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: SetItem Default Focus (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re claim _ focus ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Set Keyboard Focus Here (- 1 ); Ġ// ĠAuto Ġfocus Ġprevious Ġwidget Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: End (); ĊĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġvoid ĠĠĠ ĠExec Command ( const Ġchar * Ġcommand _ line ) Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log ("# Ġ% s \ n ", Ġcommand _ line ); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInsert Ġinto Ġhistory . ĠFirst Ġfind Ġmatch Ġand Ġdelete Ġit Ġso Ġit Ġcan Ġbe Ġpushed Ġto Ġthe Ġback . ĠThis Ġisn 't Ġtrying Ġto Ġbe Ġsmart Ġor Ġoptimal . Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Pos Ġ= Ġ- 1 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= ĠHistory . Size - 1 ; Ġi Ġ>= Ġ 0 ; Ġi --) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Str icmp ( History [ i ], Ġcommand _ line ) Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfree ( History [ i ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory . erase ( History . begin () Ġ+ Ġi ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠHistory . push _ back ( Str dup ( command _ line )); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠProcess Ġcommand Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Str icmp ( command _ line , Ġ" CLEAR ") Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClear Log (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( Str icmp ( command _ line , Ġ" HELP ") Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log (" Commands :"); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠCommands . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log ("- Ġ% s ", ĠCommands [ i ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( Str icmp ( command _ line , Ġ" HISTORY ") Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġfirst Ġ= ĠHistory . Size Ġ- Ġ 1 0 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġfirst Ġ> Ġ 0 Ġ? Ġfirst Ġ: Ġ 0 ; Ġi Ġ< ĠHistory . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log ("% 3 d : Ġ% s \ n ", Ġi , ĠHistory [ i ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log (" Unknown Ġcommand : Ġ'% s '\ n ", Ġcommand _ line ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġstatic Ġint ĠText Edit Callback Stub ( ImGui Text Edit Callback Data * Ġdata ) Ġ// ĠIn ĠC ++ 1 1 Ġyou Ġare Ġbetter Ġoff Ġusing Ġlamb das Ġfor Ġthis Ġsort Ġof Ġforwarding Ġcallbacks Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠExample App Console * Ġconsole Ġ= Ġ( Example App Console *) data -> UserData ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconsole -> Text Edit Callback ( data ); Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġint ĠĠĠĠ ĠText Edit Callback ( ImGui Text Edit Callback Data * Ġdata ) Ċ // ĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// Add Log (" cursor : Ġ% d , Ġselection : Ġ% d -% d ", Ġdata -> Cursor Pos , Ġdata -> Selection Start , Ġdata -> Selection End ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Ġ( data -> Event Flag ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcase ĠImGui Input Text Flags _ Callback Completion : Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExample Ġof ĠTEXT ĠCOMP LE TION Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLoc ate Ġbeginning Ġof Ġcurrent Ġword Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar * Ġword _ end Ġ= Ġdata -> Buf Ġ+ Ġdata -> Cursor Pos ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar * Ġword _ start Ġ= Ġword _ end ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( word _ start Ġ> Ġdata -> Buf ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar Ġc Ġ= Ġword _ start [- 1 ]; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ== Ġ' Ġ' Ġ|| Ġc Ġ== Ġ'\ t ' Ġ|| Ġc Ġ== Ġ',' Ġ|| Ġc Ġ== Ġ'; ') Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġword _ start --; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBuild Ġa Ġlist Ġof Ġcandidates Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIm Vector < const Ġchar *> Ġcandidates ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< ĠCommands . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Str nic mp ( Commands [ i ], Ġword _ start , Ġ( int )( word _ end - word _ start )) Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcandidates . push _ back ( Commands [ i ]); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( candidates . Size Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġmatch Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log (" No Ġmatch Ġfor Ġ\"% .* s \" !\ n ", Ġ( int )( word _ end - word _ start ), Ġword _ start ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( candidates . Size Ġ== Ġ 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSingle Ġmatch . ĠDelete Ġthe Ġbeginning Ġof Ġthe Ġword Ġand Ġreplace Ġit Ġentirely Ġso Ġwe 've Ġgot Ġnice Ġc asing Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Delete Chars (( int )( word _ start - data -> Buf ), Ġ( int )( word _ end - word _ start )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Insert Chars ( data -> Cursor Pos , Ġcandidates [ 0 ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Insert Chars ( data -> Cursor Pos , Ġ" Ġ"); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMultiple Ġmatches . ĠComplete Ġas Ġmuch Ġas Ġwe Ġcan , Ġso Ġinput ing Ġ" C " Ġwill Ġcomplete Ġto Ġ" CL " Ġand Ġdisplay Ġ" CLEAR " Ġand Ġ" CLAS SI FY " Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġmatch _ len Ġ= Ġ( int )( word _ end Ġ- Ġword _ start ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(;;) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġint Ġc Ġ= Ġ 0 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbool Ġall _ candidates _ matches Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< Ġcandidates . Size Ġ&& Ġall _ candidates _ matches ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ= Ġto upper ( candidates [ i ][ match _ len ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( c Ġ== Ġ 0 Ġ|| Ġc Ġ!= Ġto upper ( candidates [ i ][ match _ len ])) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall _ candidates _ matches Ġ= Ġfalse ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! all _ candidates _ matches ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch _ len ++; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match _ len Ġ> Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Delete Chars (( int )( word _ start Ġ- Ġdata -> Buf ), Ġ( int )( word _ end - word _ start )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Insert Chars ( data -> Cursor Pos , Ġcandidates [ 0 ], Ġcandidates [ 0 ] Ġ+ Ġmatch _ len ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠList Ġmatches Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log (" Possible Ġmatches :\ n "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< Ġcandidates . Size ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdd Log ("- Ġ% s \ n ", Ġcandidates [ i ]); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcase ĠImGui Input Text Flags _ Callback History : Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠExample Ġof ĠHIST ORY Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġint Ġprev _ history _ pos Ġ= ĠHistory Pos ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data -> Event Key Ġ== ĠImGui Key _ Up Arrow ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( History Pos Ġ== Ġ- 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Pos Ġ= ĠHistory . Size Ġ- Ġ 1 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( History Pos Ġ> Ġ 0 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Pos --; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( data -> Event Key Ġ== ĠImGui Key _ Down Arrow ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( History Pos Ġ!= Ġ- 1 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ History Pos Ġ>= ĠHistory . Size ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHistory Pos Ġ= Ġ- 1 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġbetter Ġimplementation Ġwould Ġpreserve Ġthe Ġdata Ġon Ġthe Ġcurrent Ġinput Ġline Ġalong Ġwith Ġcursor Ġposition . Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prev _ history _ pos Ġ!= ĠHistory Pos ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Cursor Pos Ġ= Ġdata -> Selection Start Ġ= Ġdata -> Selection End Ġ= Ġdata -> Buf Text Len Ġ= Ġ( int ) snprintf ( data -> Buf , Ġ( size _ t ) data -> Buf Size , Ġ"% s ", Ġ( History Pos Ġ>= Ġ 0 ) Ġ? ĠHistory [ History Pos ] Ġ: Ġ""); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata -> Buf Dirty Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ; Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠLog Ġ{ ĊĊĠĠĠ Ġval Ġlog Ġ= ĠExample App Log () ĊĠĠĠ Ġvar Ġlast Time Ġ= Ġ- 1 f ĊĠĠĠ Ġval Ġrandom Words Ġ= ĠarrayOf (" system ", Ġ" info ", Ġ" warning ", Ġ" error ", Ġ" fatal ", Ġ" notice ", Ġ" log ") ĊĠĠĠ Ġval Ġrandom Ġ= ĠRandom () ĊĠĠĠ Ġval Ġrand Ġget () Ġ= Ġabs ( random . nextInt () Ġ/ Ġ 1 0 0 _ 0 0 0 ) ĊĊĠĠĠ Ġ/** ĠD emon strate Ġcreating Ġa Ġsimple Ġlog Ġwindow Ġwith Ġbasic Ġfiltering . Ġ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( open : ĠK Mutable Property 0 < Boolean >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠDemo : Ġadd Ġrandom Ġitems Ġ( unless ĠCtrl Ġis Ġheld ) ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġg . time ĊĠĠĠĠĠĠĠ Ġif Ġ( time Ġ- Ġlast Time Ġ>= Ġ 0 . 2 f Ġ&& Ġ! io . key Ctrl ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġrandom Words [ rand Ġ% Ġrandom Words . size ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġ"% . 1 f ". format ( style . locale , Ġtime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . add Log (" [$ s ] ĠHello , Ġtime Ġis Ġ$ t , Ġframe Ġcount Ġis Ġ$ frame Count \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Time Ġ= Ġtime ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlog . draw (" Example : ĠLog Ġ( Filter Ġnot Ġyet Ġimplemented )", Ġopen ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠUsage : ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġstatic ĠExample App Log Ġmy _ log ; ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġmy _ log . Add Log (" Hello Ġ% d Ġworld \ n ", Ġ 1 2 3 ); ĊĠĠĠĠ Ġ* ĠĠĠĠĠ Ġmy _ log . Draw (" title "); ĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠExample App Log Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠText Filter () // ĠTODO ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠIm Vector < int > ĠĠĠĠĠĠ ĠLine Offsets ; ĠĠĠĠĠĠĠ Ġ// ĠIndex Ġto Ġlines Ġoffset ĊĠĠĠĠĠĠĠ Ġvar Ġscroll To Bottom Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Log ( fmt : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . append ( fmt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll To Bottom Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdraw ( title : ĠString , Ġopen : ĠK Mutable Property 0 < Boolean >? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Next Window Size ( Vec 2 ( 5 0 0 , Ġ 4 0 0 ), ĠCon d . First Use E ver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ begin ( title , Ġopen ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( button (" Clear ")) Ġclear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsame Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcopy Ġ= Ġbutton (" Copy ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsame Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter . draw (" Filter ", Ġ- 1 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseparator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Child (" scroll ing ", ĠVec 2 ( 0 , Ġ 0 ), Ġfalse , ĠW f . Horizontal Scrollbar . i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( copy ) Ġlog To Clipboard () Ċ Ċ // ĠĠĠĠĠ ĠTODO ĠĠĠĠĠ Ġif Ġ( Filter . IsActive ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar * Ġbuf _ begin Ġ= ĠBuf . begin () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar * Ġline Ġ= Ġbuf _ begin Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġline _ no Ġ= Ġ 0 ; Ġline Ġ!= ĠNULL ; Ġline _ no ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġchar * Ġline _ end Ġ= Ġ( line _ no Ġ< ĠLine Offsets . Size ) Ġ? Ġbuf _ begin Ġ+ ĠLine Offsets [ line _ no ] Ġ: ĠNULL Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Filter . Pass Filter ( line , Ġline _ end )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text Un formatted ( line , Ġline _ end ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġline _ end Ġ&& Ġline _ end [ 1 ] Ġ? Ġline _ end Ġ+ Ġ 1 Ġ: ĠNULL Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Un formatted ( buf . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scrollTo Bottom ) Ġset Scroll Here ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll To Bottom Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Child () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġclear () Ġ= Ġbuf . set Length ( 0 ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠLayout Ġ{ ĊĊĠĠĠ Ġvar Ġselected Child Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĠD emon strate Ġcreate Ġa Ġwindow Ġwith Ġmultiple Ġchild Ġwindows . ĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( open : ĠK Mutable Property 0 < Boolean >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġset Next Window Size ( Vec 2 ( 5 0 0 , Ġ 4 4 0 ), ĠCon d . First Use E ver ) ĊĠĠĠĠĠĠĠ Ġif Ġ(_ begin (" Example : ĠLayout ", Ġopen , ĠW f . MenuBar . i )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Bar Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu (" File ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( menuItem (" Close ")) Ġopen . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Child (" left Ġpane ", ĠVec 2 ( 1 5 0 , Ġ 0 ), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( selectable (" My Object Ġ$ it ", Ġselected Child Ġ== Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Child Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Child () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsame Line () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġright ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Group () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbegin Child (" item Ġview ", ĠVec 2 ( 0 , Ġ- frame Height With Spacing )) Ġ// ĠLeave Ġroom Ġfor Ġ 1 Ġline Ġbelow Ġus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" My Object : Ġ${ selected Child }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseparator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Wrapped (" Lorem Ġipsum Ġdolor Ġsit Ġamet , Ġconsectetur Ġadipiscing Ġelit , Ġsed Ġdo Ġeiusmod Ġtempor Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" inc id idunt Ġut Ġlabore Ġet Ġdolore Ġmagna Ġaliqua . Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Child () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton (" Re vert ") Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsame Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton (" Save ") Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Group () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġend () ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠProperty Editor Ġ{ ĊĊĠĠĠ Ġ/** ĠD emon strate Ġcreate Ġa Ġsimple Ġproperty Ġeditor . ĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( open : ĠK Mutable Property 0 < Boolean >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġset Next Window Size ( Vec 2 ( 4 3 0 , Ġ 4 5 0 ), ĠCon d . First Use E ver ) ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ begin (" Example : ĠProperty Ġeditor ", Ġopen )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshow Help Marker (" This Ġexample Ġshows Ġhow Ġyou Ġmay Ġimplement Ġa Ġproperty Ġeditor Ġusing Ġtwo Ġcolumns .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" All Ġobjects / fields Ġdata Ġare Ġd um m ies Ġhere .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Remember Ġthat Ġin Ġmany Ġsimple Ġcases , Ġyou Ġcan Ġuse ĠImGui :: Same Line ( xxx ) Ġto Ġposition \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" your Ġcursor Ġh orizontally Ġinstead Ġof Ġusing Ġthe ĠColumns () ĠAPI .") ĊĊĠĠĠĠĠĠĠ Ġpush Style Var ( Style Var . Frame Padding , ĠVec 2 ( 2 )) ĊĠĠĠĠĠĠĠ Ġcolumns ( 2 ) ĊĠĠĠĠĠĠĠ Ġseparator () ĊĊĊĠĠĠĠĠĠĠ Ġ// ĠIterate Ġdummy Ġobjects Ġwith Ġdummy Ġmembers Ġ( all Ġthe Ġsame Ġdata ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( obj I Ġin Ġ 0 .. 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dummy Object (" Object ", Ġobj I ) ĊĊĠĠĠĠĠĠĠ Ġcolumns ( 1 ) ĊĠĠĠĠĠĠĠ Ġseparator () ĊĠĠĠĠĠĠĠ Ġpop Style Var () ĊĠĠĠĠĠĠĠ Ġend () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Dummy Object ( prefix : ĠString , Ġuid : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ ĠUse Ġobject Ġuid Ġas Ġidentifier . ĠMost Ġcommonly Ġyou Ġcould Ġalso Ġuse Ġthe Ġobject Ġpointer Ġas Ġa Ġbase ĠID . ĊĠĠĠĠĠĠĠ Ġpush Id ( uid ) ĊĠĠĠĠĠĠĠ Ġ/* Ġ ĠText Ġand ĠTree Ġnodes Ġare Ġless Ġhigh Ġthan Ġregular Ġwidgets , Ġhere Ġwe Ġadd Ġvertical Ġspacing Ġto Ġmake Ġthe Ġtree ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlines Ġequal Ġhigh . ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġalign Text To Frame Padding () ĊĠĠĠĠĠĠĠ Ġval Ġnode Open Ġ= Ġtree Node (" Object ", Ġ"${ prefix }_ $ uid ") ĊĠĠĠĠĠĠĠ Ġnext Column () ĊĠĠĠĠĠĠĠ Ġalign Text To Frame Padding () ĊĠĠĠĠĠĠĠ Ġtext (" my Ġs ail or Ġis Ġrich ") ĊĠĠĠĠĠĠĠ Ġnext Column () ĊĠĠĠĠĠĠĠ Ġif Ġ( node Open ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 7 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Id ( i ) Ġ// ĠUse Ġfield Ġindex Ġas Ġidentifier . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ< Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Dummy Object (" Child ", Ġ 4 2 4 2 4 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalign Text To Frame Padding () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHere Ġwe Ġuse Ġa ĠSelect able Ġ( instead Ġof ĠText ) Ġto Ġhighlight Ġon Ġhover ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Text (" Field _% d ", Ġi ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbullet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect able (" Field _$ i ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Column () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Item Width (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ>= Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Float (" ## value ", Ġdummy Members , Ġi , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Float (" ## value ", Ġdummy Members , Ġi , Ġ 0 . 0 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Item Width () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Column () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Id () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtree Pop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpop Id () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdummy Members Ġ= Ġfloat ArrayOf ( 0 f , Ġ 0 f , Ġ 1 f , Ġ 3 . 1 4 1 6 f , Ġ 1 0 0 f , Ġ 9 9 9 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) Ċ } Ċ Ċ object ĠLong Text Ġ{ ĊĊĠĠĠ Ġ/** ĠD emon strate / test Ġrendering Ġhuge Ġamount Ġof Ġtext , Ġand Ġthe Ġinc idence Ġof Ġclipping . Ġ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( open : ĠK Mutable Property 0 < Boolean >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġset Next Window Size ( Vec 2 ( 5 2 0 , Ġ 6 0 0 ), ĠCon d . First Use E ver ) ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ begin (" Example : ĠLong Ġtext Ġdisplay , ĠTODO ", Ġopen )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Ġint Ġtest _ type Ġ= Ġ 0 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstatic ĠImGui Text Buffer Ġlog ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Ġint Ġlines Ġ= Ġ 0 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text (" Print ing Ġun usually Ġlong Ġamount Ġof Ġtext ."); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Combo (" Test Ġtype ", Ġ& test _ type , Ġ" Single Ġcall Ġto ĠText Un formatted ()\ 0 Multiple Ġcalls Ġto ĠText (), Ġcli pped Ġmanually \ 0 Multiple Ġcalls Ġto ĠText (), Ġnot Ġcli pped Ġ( slow )\ 0 "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text (" Buffer Ġcontents : Ġ% d Ġlines , Ġ% d Ġbytes ", Ġlines , Ġlog . size ()); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Button (" Clear ")) Ġ{ Ġlog . clear (); Ġlines Ġ= Ġ 0 ; Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Same Line (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Button (" Add Ġ 1 0 0 0 Ġlines ")) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< Ġ 1 0 0 0 ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . append ("% i ĠThe Ġquick Ġbrown Ġf ox Ġjumps Ġover Ġthe Ġlazy Ġdog \ n ", Ġlines + i ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines Ġ+= Ġ 1 0 0 0 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Begin Child (" Log "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Ġ( test _ type ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcase Ġ 0 : Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSingle Ġcall Ġto ĠText Un formatted () Ġwith Ġa Ġbig Ġbuffer Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text Un formatted ( log . begin (), Ġlog . end ()); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcase Ġ 1 : Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMultiple Ġcalls Ġto ĠText (), Ġmanually Ġco arse ly Ġcli pped Ġ- Ġdemonstrate Ġhow Ġto Ġuse Ġthe ĠImGui List Clip per Ġhelper . Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Push Style Var ( ImGui Style Var _ Item Spacing , ĠIm Vec 2 ( 0 , 0 )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui List Clip per Ġclip per ( lines ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( clip per . Step ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġclip per . Display Start ; Ġi Ġ< Ġclip per . Display End ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text ("% i ĠThe Ġquick Ġbrown Ġf ox Ġjumps Ġover Ġthe Ġlazy Ġdog ", Ġi ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Pop Style Var (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcase Ġ 2 : Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMultiple Ġcalls Ġto ĠText (), Ġnot Ġcli pped Ġ( slow ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Push Style Var ( ImGui Style Var _ Item Spacing , ĠIm Vec 2 ( 0 , 0 )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< Ġlines ; Ġi ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text ("% i ĠThe Ġquick Ġbrown Ġf ox Ġjumps Ġover Ġthe Ġlazy Ġdog ", Ġi ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Pop Style Var (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: End Child (); ĊĠĠĠĠĠĠĠ Ġend () ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠAuto Resize Ġ{ ĊĊĠĠĠ Ġval Ġlines Ġ= Ġint ArrayOf ( 1 0 ) ĊĊĠĠĠ Ġ/** ĠD emon strate Ġcreating Ġa Ġwindow Ġwhich Ġgets Ġauto - res ized Ġaccording Ġto Ġits Ġcontent . Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( open : ĠK Mutable Property 0 < Boolean >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ(!_ begin (" Example : ĠAuto - res izing Ġwindow ", Ġopen , ĠW f . Always Auto Resize . i )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext (" Window Ġwill Ġresize Ġevery - frame Ġto Ġthe Ġsize Ġof Ġits Ġcontent .\ n Note Ġthat Ġyou Ġprobably Ġdon 't Ġwant Ġto Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" query Ġthe Ġwindow Ġsize Ġto \ n output Ġyour Ġcontent Ġbecause Ġthat Ġwould Ġcreate Ġa Ġfeedback Ġloop .") ĊĠĠĠĠĠĠĠ Ġslider Int (" Number Ġof Ġlines ", Ġlines , Ġ 1 , Ġ 2 0 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlines [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Ġ". repeat ( i Ġ* Ġ 4 ) Ġ+ Ġ" This Ġis Ġline Ġ$ i ") Ġ// ĠPad Ġwith Ġspace Ġto Ġextend Ġsize Ġh orizontally ĊĠĠĠĠĠĠĠ Ġend () ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠCon str ained Resize Ġ{ ĊĊĠĠĠ Ġvar Ġauto Resize Ġ= Ġfalse ĊĠĠĠ Ġvar Ġtype Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġdisplay Lines Ġ= Ġ 1 0 ĊĊĠĠĠ Ġ/** ĠD emon strate Ġcreating Ġa Ġwindow Ġwith Ġcustom Ġresize Ġconstraints . ĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( open : ĠK Mutable Property 0 < Boolean >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġset Next Window Size Constraints ( Vec 2 (- 1 , Ġ 0 ), ĠVec 2 (- 1 , ĠFloat . MAX _ VALUE )) ĠĠĠĠ Ġ// ĠVertical Ġonly ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġset Next Window Size Constraints ( Vec 2 ( 0 , Ġ- 1 ), ĠVec 2 ( Float . MAX _ VALUE , Ġ- 1 )) ĠĠĠĠ Ġ// ĠHorizontal Ġonly ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġset Next Window Size Constraints ( Vec 2 ( 1 0 0 ), ĠVec 2 ( Float . MAX _ VALUE )) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWidth Ġ> Ġ 1 0 0 , ĠHeight Ġ> Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġset Next Window Size Constraints ( Vec 2 ( 4 0 0 , Ġ- 1 ), ĠVec 2 ( 5 0 0 , Ġ- 1 )) ĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWidth Ġ 4 0 0 - 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġset Next Window Size Constraints ( Vec 2 (- 1 , Ġ 4 0 0 ), ĠVec 2 (- 1 , Ġ 5 0 0 )) ĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHeight Ġ 4 0 0 - 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġset Next Window Size Constraints ( Vec 2 (), ĠVec 2 ( Float . MAX _ VALUE ), ĠCustom Constraints . square ) ĠĠĠĠĠĠĠĠĠ Ġ// ĠAlways ĠSquare ĊĠĠĠĠĠĠĠĠĠĠĠĠ 6 Ġ-> Ġset Next Window Size Constraints ( Vec 2 (), ĠVec 2 ( Float . MAX _ VALUE ), ĠCustom Constraints . step , Ġ 1 0 0 )// ĠFixed ĠStep ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġflags Ġ= Ġif Ġ( auto Resize ) ĠW f . Always Auto Resize . i Ġelse Ġ 0 ĊĠĠĠĠĠĠĠ Ġwith Window (" Example : ĠCon str ained ĠResize ", Ġopen ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdesc Ġ= ĠlistOf (" Resize Ġvertical Ġonly ", Ġ" Resize Ġhorizontal Ġonly ", Ġ" Width Ġ> Ġ 1 0 0 , ĠHeight Ġ> Ġ 1 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Width Ġ 4 0 0 - 5 0 0 ", Ġ" Height Ġ 4 0 0 - 5 0 0 ", Ġ" Custom : ĠAlways ĠSquare ", Ġ" Custom : ĠFixed ĠSteps Ġ( 1 0 0 )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton (" 2 0 0 x 2 0 0 ") Ġ{ Ġset Window Size ( Vec 2 ( 2 0 0 )) Ġ}; Ġsame Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton (" 5 0 0 x 5 0 0 ") Ġ{ Ġset Window Size ( Vec 2 ( 5 0 0 )) Ġ}; Ġsame Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton (" 8 0 0 x 2 0 0 ") Ġ{ Ġset Window Size ( Vec 2 ( 8 0 0 , Ġ 2 0 0 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Item Width ( 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcombo (" Constraint ", Ġ:: type , Ġdesc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Int (" Lines ", Ġ:: display Lines , Ġ 0 . 2 f , Ġ 1 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox (" Auto - resize ", Ġ:: auto Resize ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġdisplay Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Ġ". repeat ( i Ġ* Ġ 4 ) Ġ+ Ġ" Hello , Ġs ail or ! ĠMaking Ġthis Ġline Ġlong Ġenough Ġfor Ġthe Ġexample .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠHelper Ġfunctions Ġto Ġdemonstrate Ġprogram matic Ġconstraints ĠĠĠ Ġ*/ ĊĠĠĠ Ġobject ĠCustom Constraints Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsquare : ĠSize Callback Ġ= Ġ{ Ġit . desired Size Ġput Ġmax ( it . desired Size . x , Ġit . desired Size . y ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġstep : ĠSize Callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstep Ġ= Ġ( it . userData Ġas ĠInt ). f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . desired Size . x Ġ= Ġ( it . desired Size . x Ġ/ Ġstep Ġ+ Ġ 0 . 5 f ). i Ġ* Ġstep ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . desired Size . y Ġ= Ġ( it . desired Size . y Ġ/ Ġstep Ġ+ Ġ 0 . 5 f ). i Ġ* Ġstep ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠFixed Overlay Ġ{ ĊĊĠĠĠ Ġvar Ġcorner Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĠD emon strate Ġcreating Ġa Ġsimple Ġstatic Ġwindow Ġwith Ġno Ġdecoration Ġ+ Ġa Ġcontext - menu Ġto Ġchoose Ġwhich Ġcorner ĊĠĠĠĠ Ġ* Ġ Ġof Ġthe Ġscreen Ġto Ġuse Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( open : ĠK Mutable Property 0 < Boolean >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval ĠDIST ANCE Ġ= Ġ 1 0 f ĊĠĠĠĠĠĠĠ Ġval Ġwindow Pos Ġ= ĠVec 2 ( if Ġ( corner Ġhas Ġ 1 ) Ġio . display Size . x Ġ- ĠDIST ANCE Ġelse ĠDIST ANCE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( corner Ġhas Ġ 2 ) Ġio . display Size . y Ġ- ĠDIST ANCE Ġelse ĠDIST ANCE ) ĊĠĠĠĠĠĠĠ Ġval Ġwindow Pos Pivot Ġ= ĠVec 2 ( if Ġ( corner Ġhas Ġ 1 ) Ġ 1 f Ġelse Ġ 0 f , Ġif Ġ( corner Ġhas Ġ 2 ) Ġ 1 f Ġelse Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġset Next Window Pos ( window Pos , ĠCon d . Always , Ġwindow Pos Pivot ) ĊĠĠĠĠĠĠĠ Ġset Next Window Bg Alpha ( 0 . 3 f ) Ġ Ġ// ĠTr ansparent Ġbackground ĊĠĠĠĠĠĠĠ Ġval Ġflags Ġ= ĠW f . No Title Bar Ġor ĠW f . No Resize Ġor ĠW f . Always Auto Resize Ġor ĠW f . No Move Ġor ĠW f . No Saved Settings Ġor ĠW f . No Focus On Ap pear ing Ġor ĠW f . No Nav ĊĠĠĠĠĠĠĠ Ġwith Window (" Example : ĠFixed ĠOverlay ", Ġopen , Ġflags ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Simple Ġoverlay \ nin Ġthe Ġcorner Ġof Ġthe Ġscreen .\ n ( right - click Ġto Ġchange Ġposition )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseparator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Mouse ĠPosition : Ġ(% . 1 f ,% . 1 f ) ". format ( io . mouse Pos . x , Ġio . mouse Pos . y )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Context Window Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Top - left ", Ġ"", Ġcorner Ġ== Ġ 0 ) Ġ{ Ġcorner Ġ= Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Top - right ", Ġ"", Ġcorner Ġ== Ġ 1 ) Ġ{ Ġcorner Ġ= Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Bottom - left ", Ġ"", Ġcorner Ġ== Ġ 2 ) Ġ{ Ġcorner Ġ= Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Item (" Bottom - right ", Ġ"", Ġcorner Ġ== Ġ 3 ) Ġ{ Ġcorner Ġ= Ġ 3 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( open () Ġ&& Ġmenu Item (" Close ")) Ġopen . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠWindow Titles Ġ{ ĊĊĠĠĠ Ġ/** ĠD emon strate Ġusing Ġ" ## " Ġand Ġ" ### " Ġin Ġidentifiers Ġto Ġmanipulate ĠID Ġgeneration . ĊĠĠĠĠ Ġ* Ġ ĠThis Ġapply Ġto Ġregular Ġitems Ġas Ġwell . ĠRead ĠFAQ Ġsection Ġ" How Ġcan ĠI Ġhave Ġmultiple Ġwidgets Ġwith Ġthe Ġsame Ġlabel ? ĊĠĠĠĠ Ġ* Ġ ĠCan ĠI Ġhave Ġwidget Ġwithout Ġa Ġlabel ? Ġ( Yes ). ĠA Ġprimer Ġon Ġthe Ġpurpose Ġof Ġlabels / IDs ." Ġfor Ġdetails . ĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( open : ĠK Mutable Property 0 < Boolean >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* Ġ ĠBy Ġdefault , ĠWindows Ġare Ġuniquely Ġidentified Ġby Ġtheir Ġtitle . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠYou Ġcan Ġuse Ġthe Ġ" ## " Ġand Ġ" ### " Ġmarkers Ġto Ġmanipulate Ġthe Ġdisplay / ID . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUsing Ġ" ## " Ġto Ġdisplay Ġsame Ġtitle Ġbut Ġhave Ġunique Ġidentifier . ĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġset Next Window Pos ( Vec 2 ( 1 0 0 ), ĠCon d . First Use E ver ) ĊĠĠĠĠĠĠĠ Ġwith Window (" Same Ġtitle Ġas Ġanother Ġwindow ## 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" This Ġis Ġwindow Ġ 1 .\ n My Ġtitle Ġis Ġthe Ġsame Ġas Ġwindow Ġ 2 , Ġbut Ġmy Ġidentifier Ġis Ġunique .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Next Window Pos ( Vec 2 ( 1 0 0 , Ġ 2 0 0 ), ĠCon d . First Use E ver ) ĊĠĠĠĠĠĠĠ Ġwith Window (" Same Ġtitle Ġas Ġanother Ġwindow ## 2 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" This Ġis Ġwindow Ġ 2 .\ n My Ġtitle Ġis Ġthe Ġsame Ġas Ġwindow Ġ 1 , Ġbut Ġmy Ġidentifier Ġis Ġunique .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠUsing Ġ" ### " Ġto Ġdisplay Ġa Ġchanging Ġtitle Ġbut Ġkeep Ġa Ġstatic Ġidentifier Ġ" Animated Title " ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġ" Animated Ġtitle Ġ${ " | / -\ \" [( time Ġ/ Ġ 0 . 2 5 f ). i Ġand Ġ 3 ]} Ġ$ frame Count ### Animated Title " ĊĠĠĠĠĠĠĠ Ġset Next Window Pos ( Vec 2 ( 1 0 0 , Ġ 3 0 0 ), ĠCon d . First Use E ver ) ĊĠĠĠĠĠĠĠ Ġwith Window ( title ) Ġ{ Ġtext (" This Ġwindow Ġhas Ġa Ġchanging Ġtitle .") Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠCustom Rendering Ġ{ ĊĊĠĠĠ Ġ/** ĠD emon strate Ġusing Ġthe Ġlow - level ĠIm Draw List Ġto Ġdraw Ġcustom Ġshapes . ĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun Ġinvoke ( open : ĠK Mutable Property 0 < Boolean >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġset Next Window Size ( Vec 2 ( 3 5 0 , Ġ 5 6 0 ), ĠCon d . First Use E ver ) ĊĠĠĠĠĠĠĠ Ġif Ġ(!_ begin (" Example : ĠCustom Ġrendering ", Ġopen )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtext (" TODO ") ĊĊĠĠĠĠĠĠĠ Ġ/* Ġ ĠTip : ĠIf Ġyou Ġdo Ġa Ġlot Ġof Ġcustom Ġrendering , Ġyou Ġprobably Ġwant Ġto Ġuse Ġyour Ġown Ġge ome tr ical Ġtypes Ġand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbenefit Ġof Ġover loaded Ġoperators , Ġetc . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefine ĠIM _ VEC 2 _ CLASS _ EXTRA Ġin Ġim config . h Ġto Ġcreate Ġimplicit Ġconversions Ġbetween Ġyour Ġtypes Ġand ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIm Vec 2 / Im Vec 4 . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImGui Ġdefines Ġover loaded Ġoperators Ġbut Ġthey Ġare Ġinternal Ġto Ġimg ui . cpp Ġand Ġnot Ġexposed Ġoutside ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( to Ġavoid Ġmess ing Ġwith Ġyour Ġtypes ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIn Ġthis Ġexample Ġwe Ġare Ġnot Ġusing Ġthe Ġmath s Ġoperators ! ĠĠ Ġ*/ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠIm Draw List * Ġdraw _ list Ġ= ĠImGui :: GetWindow Draw List (); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPri mitives Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text (" Primitives "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Ġfloat Ġsz Ġ= Ġ 3 6 . 0 f ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġstatic ĠIm Vec 4 Ġcol Ġ= ĠIm Vec 4 ( 1 . 0 f , 1 . 0 f , 0 . 4 f , 1 . 0 f ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Drag Float (" Size ", Ġ& sz , Ġ 0 . 2 f , Ġ 2 . 0 f , Ġ 7 2 . 0 f , Ġ"% . 0 f "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Color Edit 3 (" Color ", Ġ& col . x ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst ĠIm Vec 2 Ġp Ġ= ĠImGui :: Get Cursor Screen Pos (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst ĠIm U 3 2 Ġcol 3 2 Ġ= ĠIm Color ( col ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat Ġx Ġ= Ġp . x Ġ+ Ġ 4 . 0 f , Ġy Ġ= Ġp . y Ġ+ Ġ 4 . 0 f , Ġspacing Ġ= Ġ 8 . 0 f ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġn Ġ= Ġ 0 ; Ġn Ġ< Ġ 2 ; Ġn ++) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloat Ġthickness Ġ= Ġ( n Ġ== Ġ 0 ) Ġ? Ġ 1 . 0 f Ġ: Ġ 4 . 0 f ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Circle ( Im Vec 2 ( x + sz * 0 . 5 f , Ġy + sz * 0 . 5 f ), Ġsz * 0 . 5 f , Ġcol 3 2 , Ġ 2 0 , Ġthickness ); Ġx Ġ+= Ġsz + spacing ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Rect ( Im Vec 2 ( x , Ġy ), ĠIm Vec 2 ( x + sz , Ġy + sz ), Ġcol 3 2 , Ġ 0 . 0 f , Ġ~ 0 , Ġthickness ); Ġx Ġ+= Ġsz + spacing ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Rect ( Im Vec 2 ( x , Ġy ), ĠIm Vec 2 ( x + sz , Ġy + sz ), Ġcol 3 2 , Ġ 1 0 . 0 f , Ġ~ 0 , Ġthickness ); Ġx Ġ+= Ġsz + spacing ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Triangle ( Im Vec 2 ( x + sz * 0 . 5 f , Ġy ), ĠIm Vec 2 ( x + sz , y + sz - 0 . 5 f ), ĠIm Vec 2 ( x , y + sz - 0 . 5 f ), Ġcol 3 2 , Ġthickness ); Ġx Ġ+= Ġsz + spacing ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Line ( Im Vec 2 ( x , Ġy ), ĠIm Vec 2 ( x + sz , Ġy ĠĠ Ġ), Ġcol 3 2 , Ġthickness ); Ġx Ġ+= Ġsz + spacing ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Line ( Im Vec 2 ( x , Ġy ), ĠIm Vec 2 ( x + sz , Ġy + sz ), Ġcol 3 2 , Ġthickness ); Ġx Ġ+= Ġsz + spacing ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Line ( Im Vec 2 ( x , Ġy ), ĠIm Vec 2 ( x , ĠĠĠ Ġy + sz ), Ġcol 3 2 , Ġthickness ); Ġx Ġ+= Ġspacing ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Bezier Curve ( Im Vec 2 ( x , Ġy ), ĠIm Vec 2 ( x + sz * 1 . 3 f , y + sz * 0 . 3 f ), ĠIm Vec 2 ( x + sz - sz * 1 . 3 f , y + sz - sz * 0 . 3 f ), ĠIm Vec 2 ( x + sz , Ġy + sz ), Ġcol 3 2 , Ġthickness ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġp . x Ġ+ Ġ 4 ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġsz + spacing ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Circle Filled ( Im Vec 2 ( x + sz * 0 . 5 f , Ġy + sz * 0 . 5 f ), Ġsz * 0 . 5 f , Ġcol 3 2 , Ġ 3 2 ); Ġx Ġ+= Ġsz + spacing ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Rect Filled ( Im Vec 2 ( x , Ġy ), ĠIm Vec 2 ( x + sz , Ġy + sz ), Ġcol 3 2 ); Ġx Ġ+= Ġsz + spacing ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Rect Filled ( Im Vec 2 ( x , Ġy ), ĠIm Vec 2 ( x + sz , Ġy + sz ), Ġcol 3 2 , Ġ 1 0 . 0 f ); Ġx Ġ+= Ġsz + spacing ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Triangle Filled ( Im Vec 2 ( x + sz * 0 . 5 f , Ġy ), ĠIm Vec 2 ( x + sz , y + sz - 0 . 5 f ), ĠIm Vec 2 ( x , y + sz - 0 . 5 f ), Ġcol 3 2 ); Ġx Ġ+= Ġsz + spacing ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Rect Filled Multi Color ( Im Vec 2 ( x , Ġy ), ĠIm Vec 2 ( x + sz , Ġy + sz ), ĠCOL 3 2 ( 0 , 0 , 0 , 2 5 5 ), ĠCOL 3 2 ( 2 5 5 , 0 , 0 , 2 5 5 ), ĠCOL 3 2 ( 2 5 5 , 2 5 5 , 0 , 2 5 5 ), ĠCOL 3 2 ( 0 , 2 5 5 , 0 , 2 5 5 )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Dummy ( Im Vec 2 (( sz + spacing )* 8 , Ġ( sz + spacing )* 3 )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Separator (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatic ĠIm Vector < Im Vec 2 > Ġpoints ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatic Ġbool Ġadding _ line Ġ= Ġfalse ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text (" Canvas Ġexample "); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Button (" Clear ")) Ġpoints . clear (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( points . Size Ġ>= Ġ 2 ) Ġ{ ĠImGui :: Same Line (); Ġif Ġ( ImGui :: Button (" Undo ")) Ġ{ Ġpoints . pop _ back (); Ġpoints . pop _ back (); Ġ} Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: Text (" Left - click Ġand Ġdrag Ġto Ġadd Ġlines ,\ n Right - click Ġto Ġundo "); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHere Ġwe Ġare Ġusing ĠIn visible Button () Ġas Ġa Ġconvenience Ġto Ġ 1 ) Ġadvance Ġthe Ġcursor Ġand Ġ 2 ) Ġallows Ġus Ġto Ġuse ĠIs Item Hover ed () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHowever Ġyou Ġcan Ġdraw Ġdirectly Ġand Ġpoll Ġmouse / keyboard Ġby Ġyourself . ĠYou Ġcan Ġmanipulate Ġthe Ġcursor Ġusing ĠGet Cursor Pos () Ġand ĠSet Cursor Pos (). Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġyou Ġonly Ġuse Ġthe ĠIm Draw List ĠAPI , Ġyou Ġcan Ġnotify Ġthe Ġowner Ġwindow Ġof Ġits Ġextends Ġby Ġusing ĠSet Cursor Pos ( max ). Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIm Vec 2 Ġcanvas _ pos Ġ= ĠImGui :: Get Cursor Screen Pos (); ĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIm Draw List ĠAPI Ġuses Ġscreen Ġcoordinates ! Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIm Vec 2 Ġcanvas _ size Ġ= ĠImGui :: Get Content Region Avail (); ĠĠĠĠĠĠĠ Ġ// ĠResize Ġcanvas Ġto Ġwhat 's Ġavailable Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( canvas _ size . x Ġ< Ġ 5 0 . 0 f ) Ġcanvas _ size . x Ġ= Ġ 5 0 . 0 f ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( canvas _ size . y Ġ< Ġ 5 0 . 0 f ) Ġcanvas _ size . y Ġ= Ġ 5 0 . 0 f ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Rect Filled Multi Color ( canvas _ pos , ĠIm Vec 2 ( canvas _ pos . x Ġ+ Ġcanvas _ size . x , Ġcanvas _ pos . y Ġ+ Ġcanvas _ size . y ), ĠIM _ COL 3 2 ( 5 0 , 5 0 , 5 0 , 2 5 5 ), ĠIM _ COL 3 2 ( 5 0 , 5 0 , 6 0 , 2 5 5 ), ĠIM _ COL 3 2 ( 6 0 , 6 0 , 7 0 , 2 5 5 ), ĠIM _ COL 3 2 ( 5 0 , 5 0 , 6 0 , 2 5 5 )); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Rect ( canvas _ pos , ĠIm Vec 2 ( canvas _ pos . x Ġ+ Ġcanvas _ size . x , Ġcanvas _ pos . y Ġ+ Ġcanvas _ size . y ), ĠIM _ COL 3 2 ( 2 5 5 , 2 5 5 , 2 5 5 , 2 5 5 )); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbool Ġadding _ preview Ġ= Ġfalse ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImGui :: In visible Button (" canvas ", Ġcanvas _ size ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIm Vec 2 Ġmouse _ pos _ in _ canvas Ġ= ĠIm Vec 2 ( ImGui :: Get IO (). Mouse Pos . x Ġ- Ġcanvas _ pos . x , ĠImGui :: Get IO (). Mouse Pos . y Ġ- Ġcanvas _ pos . y ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adding _ line ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadding _ preview Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . push _ back ( mouse _ pos _ in _ canvas ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ImGui :: Is MouseDown [ 0 ]) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadding _ line Ġ= Ġadding _ preview Ġ= Ġfalse ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Is Item Hover ed ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! adding _ line Ġ&& ĠImGui :: Is Mouse Clicked ( 0 )) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . push _ back ( mouse _ pos _ in _ canvas ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadding _ line Ġ= Ġtrue ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ImGui :: Is Mouse Clicked ( 1 ) Ġ&& Ġ! points . empty ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadding _ line Ġ= Ġadding _ preview Ġ= Ġfalse ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . pop _ back (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . pop _ back (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Push Clip Rect ( canvas _ pos , ĠIm Vec 2 ( canvas _ pos . x + canvas _ size . x , Ġcanvas _ pos . y + canvas _ size . y ), Ġtrue ); ĠĠĠĠĠ Ġ// Ġclip Ġlines Ġwithin Ġthe Ġcanvas Ġ( if Ġwe Ġresize Ġit , Ġetc .) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( int Ġi Ġ= Ġ 0 ; Ġi Ġ< Ġpoints . Size Ġ- Ġ 1 ; Ġi Ġ+= Ġ 2 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Add Line ( Im Vec 2 ( canvas _ pos . x Ġ+ Ġpoints [ i ]. x , Ġcanvas _ pos . y Ġ+ Ġpoints [ i ]. y ), ĠIm Vec 2 ( canvas _ pos . x Ġ+ Ġpoints [ i + 1 ]. x , Ġcanvas _ pos . y Ġ+ Ġpoints [ i + 1 ]. y ), ĠIM _ COL 3 2 ( 2 5 5 , 2 5 5 , 0 , 2 5 5 ), Ġ 2 . 0 f ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw _ list -> Pop Clip Rect (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adding _ preview ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . pop _ back (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġend () ĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠStyle Editor Ġ{ ĊĊĠĠĠ Ġvar Ġinit Ġ= Ġtrue ĊĠĠĠ Ġvar Ġref Saved Style : ĠStyle ? Ġ= Ġnull ĊĠĠĠ Ġ// ĠDefault ĠStyles ĠSelector ĊĠĠĠ Ġvar Ġstyle Idx Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġwindow Border Ġ= Ġfalse ĊĠĠĠ Ġvar Ġframe Border Ġ= Ġfalse ĊĠĠĠ Ġvar Ġpopup Border Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġoutput Dest Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġoutput Only Modified Ġ= Ġtrue ĊĠĠĠ Ġvar Ġalpha Flags Ġ= Ġ 0 ĊĠĠĠ Ġval Ġfilter Ġ= ĠText Filter () ĊĠĠĠ Ġvar Ġwindow Scale Ġ= Ġ 1 f ĊĊĠĠĠ Ġoperator Ġfun Ġinvoke ( ref : ĠStyle ? Ġ= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/* Ġ ĠYou Ġcan Ġpass Ġin Ġa Ġreference ĠImGui Style Ġstructure Ġto Ġcompare Ġto , Ġrevert Ġto Ġand Ġsave Ġto ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( else Ġit Ġcomp ares Ġto Ġthe Ġdefault Ġstyle ) ĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġ// ĠDefault Ġto Ġusing Ġinternal Ġstorage Ġas Ġreference ĊĠĠĠĠĠĠĠ Ġif Ġ( init Ġ&& Ġref Ġ== Ġnull ) Ġref Saved Style Ġ= ĠStyle ( style ) ĊĠĠĠĠĠĠĠ Ġinit Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġref Ġ= Ġref Ġ?: Ġref Saved Style ĊĊĠĠĠĠĠĠĠ Ġpush Item Width ( window Width Ġ* Ġ 0 . 5 5 f ) ĊĠĠĠĠĠĠĠ Ġif Ġ( show Style Selector (" Colors ## Selector ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref Saved Style Ġ= ĠStyle ( style ) ĊĊĠĠĠĠĠĠĠ Ġshow Font Selector (" Fonts ## Selector ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠSimpl ified ĠSettings ĊĠĠĠĠĠĠĠ Ġif Ġ( slider Float (" Frame Round ing ", Ġstyle :: frame Round ing , Ġ 0 f , Ġ 1 2 f , Ġ"% . 0 f ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . grab Round ing Ġ= Ġstyle . frame Round ing ĠĠĠ Ġ// ĠMake ĠGrab Round ing Ġalways Ġthe Ġsame Ġvalue Ġas ĠFrame Round ing ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Border Ġ= Ġstyle . window Border Size Ġ> Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( checkbox (" Window Border ", Ġ:: window Border )) Ġstyle . window Border Size Ġ= Ġif Ġ( window Border ) Ġ 1 f Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsame Line () ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġframe Border Ġ= Ġstyle . frame Border Size Ġ> Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( checkbox (" Frame Border ", Ġ:: frame Border )) Ġstyle . frame Border Size Ġ= Ġif Ġ( frame Border ) Ġ 1 f Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsame Line () ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Border Ġ= Ġstyle . popup Border Size Ġ> Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( checkbox (" Popup Border ", Ġ:: popup Border )) Ġstyle . popup Border Size Ġ= Ġif Ġ( popup Border ) Ġ 1 f Ġelse Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSave / Re vert Ġbutton ĊĠĠĠĠĠĠĠ Ġbutton (" Save ĠRef ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref Saved Style Ġ= ĠStyle ( style ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġref Ġ= Ġstyle ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsame Line () ĊĠĠĠĠĠĠĠ Ġif Ġ( button (" Re vert ĠRef ")) Ġg . style Ġ= Ġref !! ĊĠĠĠĠĠĠĠ Ġsame Line () ĊĠĠĠĠĠĠĠ Ġshow Help Marker (" Save / Re vert Ġin Ġlocal Ġnon - persistent Ġstorage . ĠDefault ĠColors Ġdefinition Ġare Ġnot Ġaffected . ĠUse Ġ\" Export ĠColors \" Ġbelow Ġto Ġsave Ġthem Ġsomewhere .") ĊĊĠĠĠĠĠĠĠ Ġtree Node (" Rendering ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox (" Anti - ali ased Ġlines ", Ġstyle :: anti Ali ased Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox (" Anti - ali ased Ġfill ", Ġstyle :: anti Ali ased Fill ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Item Width ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Float (" Curve ĠTes sell ation ĠT olerance ", Ġstyle :: curve Tes sell ation T ol , Ġ 0 . 0 2 f , Ġ 0 . 1 f , ĠFloat . MAX _ VALUE , Ġ"", Ġ 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . curve Tes sell ation T ol Ġ< Ġ 0 f ) Ġstyle . curve Tes sell ation T ol Ġ= Ġ 0 . 1 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ ĠNot Ġexposing Ġzero Ġhere Ġso Ġuser Ġdoesn 't Ġ" lose " Ġthe ĠUI Ġ( zero Ġalpha Ġcli ps Ġall Ġwidgets ). ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBut Ġapplication Ġcode Ġcould Ġhave Ġa Ġtoggle Ġto Ġswitch Ġbetween Ġzero Ġand Ġnon - zero . ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Float (" Global ĠAlpha ", Ġstyle :: alpha , Ġ 0 . 0 0 5 f , Ġ 0 . 2 f , Ġ 1 f , Ġ"% . 2 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpop Item Width () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtree Node (" Settings ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Vec 2 (" Window Padding ", Ġstyle . window Padding , Ġ 0 f , Ġ 2 0 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Popup Round ing ", Ġstyle :: popup Round ing , Ġ 0 f , Ġ 1 6 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Vec 2 (" Frame Padding ", Ġstyle . frame Padding , Ġ 0 f , Ġ 2 0 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Vec 2 (" Item Spacing ", Ġstyle . item Spacing , Ġ 0 f , Ġ 2 0 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Vec 2 (" Item Inner Spacing ", Ġstyle . item Inner Spacing , Ġ 0 f , Ġ 2 0 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Vec 2 (" Touch Extra Padding ", Ġstyle . touch Extra Padding , Ġ 0 f , Ġ 1 0 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Indent Spacing ", Ġstyle :: indent Spacing , Ġ 0 f , Ġ 3 0 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Scrollbar Size ", Ġstyle :: scrollbar Size , Ġ 1 f , Ġ 2 0 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Grab Min Size ", Ġstyle :: grab Min Size , Ġ 1 f , Ġ 2 0 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Border Size ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Window Border Size ", Ġstyle :: window Border Size , Ġ 0 f , Ġ 1 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Child Border Size ", Ġstyle :: child Border Size , Ġ 0 f , Ġ 1 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Popup Border Size ", Ġstyle :: popup Border Size , Ġ 0 f , Ġ 1 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Frame Border Size ", Ġstyle :: frame Border Size , Ġ 0 f , Ġ 1 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Round ing ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Window Round ing ", Ġstyle :: window Round ing , Ġ 0 f , Ġ 1 6 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Child Round ing ", Ġstyle :: child Round ing , Ġ 0 f , Ġ 1 6 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Frame Round ing ", Ġstyle :: frame Round ing , Ġ 0 f , Ġ 1 6 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Scrollbar Round ing ", Ġstyle :: scrollbar Round ing , Ġ 0 . 0 f , Ġ 1 6 . 0 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Float (" Grab Round ing ", Ġstyle :: grab Round ing , Ġ 0 f , Ġ 1 6 f , Ġ"% . 0 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Alignment ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Vec 2 (" Window Title Align ", Ġstyle . window Title Align , Ġ 0 f , Ġ 1 f , Ġ"% . 2 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġslider Vec 2 (" ButtonText Align ", Ġstyle . button Text Align , Ġ 0 f , Ġ 1 f , Ġ"% . 2 f ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsame Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Help Marker (" Alignment Ġapplies Ġwhen Ġa Ġbutton Ġis Ġlarger Ġthan Ġits Ġtext Ġcontent .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtree Node (" Colors ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton (" Export ĠUn saved ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( output Dest Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog To Clipboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO () Ġ// log To TTY () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ImGui :: Log Text (" Im Vec 4 * Ġcolors Ġ= ĠImGui :: Get Style (). Colors ;" ĠIM _ NEW LINE ); ĠTODO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin ĠCol . values ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol Ġ= Ġstyle . colors [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġi . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! output Only Modified Ġ|| Ġcol Ġ!= Ġref !!. colors [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO () // log Text (" colors [ ImGui Col _% s ] % * s = ĠIm Vec 4 (% . 2 ff , Ġ%. 2 ff , Ġ%. 2 ff , Ġ%. 2 ff );" ĠIM _ NEW LINE , Ġname , Ġ 2 3 Ġ- Ġ( int ) strlen ( name ), Ġ"", Ġcol . x , Ġcol . y , Ġcol . z , Ġcol . w ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Finish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsame Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Item Width ( 1 2 0 f ) Ġ{ Ġcombo (" ## output _ type ", Ġ:: output Dest , Ġ" To ĠClip board \ u 0 0 0 0 To ĠT TY \ u 0 0 0 0 ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsame Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckbox (" Only ĠModified ĠColors ", Ġ:: output Only Modified ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Tip : ĠLeft - click Ġon Ġcolored Ġsquare Ġto Ġopen Ġcolor Ġpicker ,\ n Right - click Ġto Ġopen Ġedit Ġoptions Ġmenu .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġradio Button (" Opaque ", Ġ:: alpha Flags , Ġ 0 ); Ġsame Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradio Button (" Alpha ", Ġ:: alpha Flags , ĠC ef . Alpha Preview . i ); Ġsame Line () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġradio Button (" Both ", Ġ:: alpha Flags , ĠC ef . Alpha Preview Half . i ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= ĠW f . Always Vertical Scrollbar Ġor ĠW f . Always Horizontal Scrollbar Ġor ĠW f . Nav Flatten ed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Child ("# colors ", ĠVec 2 ( 0 , Ġ 3 0 0 ), Ġtrue , Ġflags ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Item Width (- 1 6 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil ĠCol . COUNT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠCol . values ()[ i ]. name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! filter . pass Filter ( name )) Ġ// ĠTODO Ġfix Ġbug ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Id ( i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Edit Vec 4 (" ## color ", Ġstyle . colors [ i ], ĠC ef . Alpha Bar Ġor Ġalpha Flags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( style . colors [ i ] Ġ!= Ġref !!. colors [ i ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ ĠT ips : Ġin Ġa Ġreal Ġuser Ġapplication , Ġyou Ġmay Ġwant Ġto Ġmerge Ġand Ġuse Ġan Ġicon Ġfont Ġinto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe Ġmain Ġfont , Ġso Ġinstead Ġof Ġ" Save " /" Re vert " Ġyou 'd Ġuse Ġicons . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRead Ġthe ĠFAQ Ġand Ġmisc / fonts / README . txt Ġabout Ġusing Ġicon Ġfonts . ĠIt 's Ġreally Ġeasy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġsuper Ġconvenient ! Ġ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsame Line ( 0 f , Ġstyle . item Inner Spacing . x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( button (" Save ")) Ġref !!. colors [ i ] Ġ= ĠVec 4 ( style . colors [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsame Line ( 0 f , Ġstyle . item Inner Spacing . x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( button (" Re vert ")) Ġstyle . colors [ i ] Ġ= ĠVec 4 ( ref !!. colors [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsame Line ( 0 f , Ġstyle . item Inner Spacing . x ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Un formatted ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfonts Opened Ġ= Ġtree Node (" Fonts ", Ġ" Fonts Ġ(${ io . fonts . fonts . size }) ") ĊĠĠĠĠĠĠĠ Ġsame Line (); Ġshow Help Marker (" Tip : ĠLoad Ġfonts Ġwith Ġio . fonts . add Font FromFile T TF ()\ n before Ġcalling Ġio . fonts . get Tex * Ġfunctions .") ĊĠĠĠĠĠĠĠ Ġif Ġ( fonts Opened ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġatlas Ġ= Ġio . fonts ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtree Node (" Atlas Ġtexture ", Ġ" Atlas Ġtexture Ġ(${ atlas . tex Size . x } x ${ atlas . tex Size . y } Ġpixels )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage ( atlas . tex Id , ĠVec 2 ( atlas . tex Size ), ĠVec 2 (), ĠVec 2 ( 1 ), ĠVec 4 . from Color ( 2 5 5 , Ġ 2 5 5 , Ġ 2 5 5 , Ġ 2 5 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVec 4 . from Color ( 2 5 5 , Ġ 2 5 5 , Ġ 2 5 5 , Ġ 1 2 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Item Width ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġatlas . fonts . size ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfont Ġ= Ġatlas . fonts [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġfont . config Data . get OrNull ( 0 )?. name Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfont Details Opened Ġ= Ġbullet Text (" Font Ġ$ i : Ġ'$ name ', Ġ%. 2 f Ġpx , Ġ${ font . glyph s . size } Ġglyph s ", Ġfont . fontSize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsame Line (); Ġsmall Button (" Set Ġas Ġdefault ") Ġ{ Ġio . font Default Ġ= Ġfont Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fonts Opened ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Font ( font ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" The Ġquick Ġbrown Ġf ox Ġjumps Ġover Ġthe Ġlazy Ġdog ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Font () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscale Ġ= Ġfloat ArrayOf ( font . scale ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠScale Ġonly Ġthis Ġfont ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Float (" Font Ġscale ", Ġscale , Ġ 0 . 0 0 5 f , Ġ 0 . 3 f , Ġ 2 f , Ġ"% . 1 f ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput Float (" Font Ġoffset ", Ġfont . display Offset :: y , Ġ 1 f , Ġ 1 f , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfont . scale Ġ= Ġscale [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsame Line () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Help Marker (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Note Ġthan Ġthe Ġdefault Ġembedded Ġfont Ġis ĠNOT Ġmeant Ġto Ġbe Ġscaled . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| Font Ġare Ġcurrently Ġrendered Ġinto Ġbit maps Ġat Ġa Ġgiven Ġsize Ġat Ġthe Ġtime Ġof Ġbuilding Ġthe Ġatlas . ĠYou Ġmay Ġover sample Ġthem Ġto Ġget Ġsome Ġflexibility Ġwith Ġscaling . ĠYou Ġcan Ġalso Ġrender Ġat Ġmultiple Ġsizes Ġand Ġselect Ġwhich Ġone Ġto Ġuse Ġat Ġruntime . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ| ( G lim mer Ġof Ġhope : Ġthe Ġatlas Ġsystem Ġshould Ġhopefully Ġbe Ġre written Ġin Ġthe Ġfuture Ġto Ġmake Ġscaling Ġmore Ġnatural Ġand Ġautomatic .) """. trim Margin ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Asc ent : Ġ${ font . as cent }, ĠDes cent : Ġ${ font . desc ent }, ĠHeight : Ġ${ font . as cent Ġ- Ġfont . desc ent }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Fallback Ġcharacter : Ġ'${ font . fallback Char }' Ġ(${ font . fallback Char . i }) ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġside Ġ= Ġsqrt ( font . metrics Total Surface . f ). i ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Texture Ġsurface : Ġ${ font . metrics Total Surface } Ġpixels Ġ( approx ) Ġ~ Ġ${ side } x $ side ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġ 0 Ġuntil Ġfont . config Data Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfont . config Data . get OrNull ( c )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbullet Text (" Input Ġ$ c : Ġ'${ it . name }', ĠOver sample : Ġ${ it . over sample }, ĠPixel Snap H : Ġ${ it . pixel Snap H }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtree Node (" Glyph s ", Ġ" Glyph s Ġ(${ font . glyph s . size }) ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġall Ġglyph s Ġof Ġthe Ġfonts Ġin Ġseparate Ġpages Ġof Ġ 2 5 6 Ġcharacters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠForce fully / dod g ily Ġmake ĠFind Glyph () Ġreturn ĠNULL Ġon Ġfallback , Ġwhich Ġisn 't Ġthe Ġdefault Ġbehavior . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġglyph Fallback Ġ= Ġfont . fallback Glyph ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfont . fallback Glyph Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( base Ġin Ġ 0 Ġuntil Ġ 0 x 1 0 0 0 0 Ġstep Ġ 2 5 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġ( 0 Ġuntil Ġ 2 5 6 ). sum By Ġ{ Ġif Ġ( font . find Glyph (( base Ġ+ Ġit ). c ) Ġ!= Ġnull ) Ġ 1 Ġelse Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġif Ġ( count Ġ> Ġ 1 ) Ġ" glyph s " Ġelse Ġ" glyph " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Ġ> Ġ 0 Ġ&& Ġtree Node ( base , Ġ" U +% 0 4 X .. U +% 0 4 X Ġ($ count Ġ$ s )", Ġbase , Ġbase Ġ+ Ġ 2 5 5 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Spacing Ġ= Ġstyle . item Spacing . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell Size Ġ= ĠVec 2 ( font . fontSize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Pos Ġ= ĠVec 2 ( cursor Screen Pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdraw List Ġ= Ġwindow Draw List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġ 0 Ġuntil Ġ 2 5 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell P 1 Ġ= ĠVec 2 ( base Pos . x Ġ+ Ġ( n Ġ% Ġ 1 6 ) Ġ* Ġ( cell Size . x Ġ+ Ġcell Spacing ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Pos . y Ġ+ Ġ( n Ġ/ Ġ 1 6 ) Ġ* Ġ( cell Size . y Ġ+ Ġcell Spacing )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcell P 2 Ġ= ĠVec 2 ( cell P 1 . x Ġ+ Ġcell Size . x , Ġcell P 1 . y Ġ+ Ġcell Size . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġglyph Ġ= Ġfont . find Glyph (( base Ġ+ Ġn ). c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw List . add Rect ( cell P 1 , Ġcell P 2 , ĠCOL 3 2 ( 2 5 5 , Ġ 2 5 5 , Ġ 2 5 5 , Ġif Ġ( glyph Ġ!= Ġnull ) Ġ 1 0 0 Ġelse Ġ 5 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġ ĠWe Ġuse ĠIm Font :: Render Char Ġas Ġa Ġshortcut Ġbecause Ġwe Ġdon 't Ġhave ĠUTF - 8 Ġconversion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctions Ġavailable Ġto Ġgenerate Ġa Ġstring . ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfont . render Char ( draw List , Ġcell Size . x , Ġcell P 1 , ĠCol . Text . u 3 2 , Ġ( base Ġ+ Ġn ). c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( glyph Ġ!= Ġnull Ġ&& Ġis Mouse Hover ing Rect ( cell P 1 , Ġcell P 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Tooltip Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Code point : ĠU +% 0 4 X ", Ġbase Ġ+ Ġn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseparator () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Advance X + 1 : Ġ%. 1 f ", Ġglyph . advance X ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" Pos : Ġ(% . 2 f ,% . 2 f )-> (% . 2 f ,% . 2 f )", Ġglyph . x 0 , Ġglyph . y 0 , Ġglyph . x 1 , Ġglyph . y 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext (" UV : Ġ(% . 3 f ,% . 3 f )-> (% . 3 f ,% . 3 f )", Ġglyph . u 0 , Ġglyph . v 0 , Ġglyph . u 1 , Ġglyph . v 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdummy ( Vec 2 (( cell Size . x Ġ+ Ġcell Spacing ) Ġ* Ġ 1 6 , Ġ( cell Size . y Ġ+ Ġcell Spacing ) Ġ* Ġ 1 6 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtree Pop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfont . fallback Glyph Ġ= Ġglyph Fallback ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp F Ġ= Ġfloat ArrayOf ( window Scale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Float (" this Ġwindow Ġscale ", Ġp F , Ġ 0 . 0 0 5 f , Ġ 0 . 3 f , Ġ 2 f , Ġ"% . 1 f ") ĠĠĠ Ġ// Ġscale Ġonly Ġthis Ġwindow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Scale Ġ= Ġp F [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp F [ 0 ] Ġ= Ġio . font Global Scale ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrag Float (" global Ġscale ", Ġp F , Ġ 0 . 0 0 5 f , Ġ 0 . 3 f , Ġ 2 f , Ġ"% . 1 f ") Ġ// Ġscale Ġeverything ĊĠĠĠĠĠĠĠĠĠĠĠ Ġio . font Global Scale Ġ= Ġp F [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpop Item Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Window Font Scale ( window Scale ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpop Item Width () ĊĠĠĠ Ġ} Ċ }