Artifact
e5da405346c6e5f0e440e412789706aa71914404:
Wiki page
[
MIOGUI] by
aldo
2016-09-09 12:37:10.
0000: 44 20 32 30 31 36 2d 30 39 2d 30 39 54 31 32 3a D 2016-09-09T12:
0010: 33 37 3a 31 30 2e 34 39 31 0a 4c 20 4d 49 4f 47 37:10.491.L MIOG
0020: 55 49 0a 50 20 32 30 31 35 63 30 37 61 63 38 36 UI.P 2015c07ac86
0030: 35 61 31 37 39 63 30 64 34 38 62 30 61 30 36 38 5a179c0d48b0a068
0040: 30 64 37 36 30 66 34 35 36 62 33 64 61 0a 55 20 0d760f456b3da.U
0050: 61 6c 64 6f 0a 57 20 33 30 39 37 0a 3c 68 31 3e aldo.W 3097.<h1>
0060: 4d 49 4f 47 55 49 3c 2f 68 31 3e 0d 0a 0d 0a 4d MIOGUI</h1>....M
0070: 6f 72 65 20 49 6d 6d 65 64 69 61 74 65 20 4f 70 ore Immediate Op
0080: 65 72 61 74 69 6f 6e 20 47 55 49 20 2d 20 44 65 eration GUI - De
0090: 76 65 6c 6f 70 20 47 55 49 20 69 6e 20 73 63 68 velop GUI in sch
00a0: 65 6d 65 20 69 6e 20 69 6e 63 72 65 6d 65 6e 74 eme in increment
00b0: 61 6c 20 26 20 69 6d 6d 65 64 69 61 74 65 20 6d al & immediate m
00c0: 6f 64 65 21 0d 0a 0d 0a 41 6c 70 68 61 20 76 65 ode!....Alpha ve
00d0: 72 73 69 6f 6e 21 20 4e 65 65 64 20 73 6f 6d 65 rsion! Need some
00e0: 20 63 6c 65 61 6e 75 70 20 61 6e 64 20 73 6f 6d cleanup and som
00f0: 65 20 6d 6f 72 65 20 77 69 64 67 65 74 73 20 26 e more widgets &
0100: 20 64 65 6d 6f 73 2e 2e 2e 0d 0a 0d 0a 5b 2f 64 demos.......[/d
0110: 6f 63 2f 74 69 70 2f 64 65 6d 6f 73 7c 53 68 6f oc/tip/demos|Sho
0120: 77 20 6d 65 20 64 65 6d 6f 73 20 61 6e 64 20 73 w me demos and s
0130: 63 72 65 65 6e 73 68 6f 74 73 21 5d 0d 0a 0d 0a creenshots!]....
0140: 3c 68 32 3e 43 6f 6e 63 65 70 74 73 3c 68 32 3e <h2>Concepts<h2>
0150: 0d 0a 3c 68 33 3e 49 6d 6d 65 64 69 61 74 65 20 ..<h3>Immediate
0160: 4d 6f 64 65 20 47 55 49 3c 2f 68 33 3e 0d 0a 54 Mode GUI</h3>..T
0170: 68 69 73 20 6d 65 61 6e 73 20 74 68 61 74 20 74 his means that t
0180: 68 65 20 75 73 65 72 20 6e 65 76 65 72 20 68 61 he user never ha
0190: 73 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20 6f s to deal with o
01a0: 62 6a 65 63 74 73 20 28 61 6e 74 69 2d 6f 6f 70 bjects (anti-oop
01b0: 20 77 61 79 20 3b 29 2e 0d 0a 0d 0a 53 6f 6d 65 way ;).....Some
01c0: 20 70 72 6f 6a 65 63 74 73 2c 20 77 72 69 74 74 projects, writt
01d0: 65 6e 20 69 6e 20 43 20 6f 72 20 43 2b 2b 0d 0a en in C or C++..
01e0: 20 20 2a 20 20 5b 68 74 74 70 73 3a 2f 2f 67 69 * [https://gi
01f0: 74 68 75 62 2e 63 6f 6d 2f 6f 63 6f 72 6e 75 74 thub.com/ocornut
0200: 2f 69 6d 67 75 69 7c 64 65 61 72 20 69 6d 67 75 /imgui|dear imgu
0210: 69 5d 0d 0a 20 20 2a 20 20 5b 68 74 74 70 3a 2f i].. * [http:/
0220: 2f 73 6f 6c 2e 67 66 78 69 6c 65 2e 6e 65 74 2f /sol.gfxile.net/
0230: 69 6d 67 75 69 2f 7c 53 6f 6c 20 6f 6e 20 49 6d imgui/|Sol on Im
0240: 6d 65 64 69 61 74 65 20 4d 6f 64 65 20 47 55 49 mediate Mode GUI
0250: 73 5d 0d 0a 20 20 2a 20 20 5b 68 74 74 70 3a 2f s].. * [http:/
0260: 2f 77 77 77 2e 6a 6f 68 6e 6f 2e 73 65 2f 62 6f /www.johno.se/bo
0270: 6f 6b 2f 69 6d 67 75 69 2e 68 74 6d 6c 7c 49 4d ok/imgui.html|IM
0280: 47 55 49 5d 0d 0a 20 20 2a 20 20 5b 68 74 74 70 GUI].. * [http
0290: 3a 2f 2f 70 65 72 73 6f 2e 75 6e 69 76 2d 6c 79 ://perso.univ-ly
02a0: 6f 6e 31 2e 66 72 2f 74 68 69 65 72 72 79 2e 65 on1.fr/thierry.e
02b0: 78 63 6f 66 66 69 65 72 2f 5a 4d 57 2f 7c 5a 65 xcoffier/ZMW/|Ze
02c0: 72 6f 20 4d 65 6d 6f 72 79 20 57 69 64 67 65 74 ro Memory Widget
02d0: 5d 0d 0a 20 0d 0a 41 20 4d 69 63 72 6f 73 6f 66 ].. ..A Microsof
02e0: 74 20 70 61 70 65 72 20 6f 6e 20 74 68 65 20 73 t paper on the s
02f0: 75 62 6a 65 63 74 3a 0d 0a 20 20 2a 20 20 5b 68 ubject:.. * [h
0300: 74 74 70 73 3a 2f 2f 77 77 77 2e 6d 69 63 72 6f ttps://www.micro
0310: 73 6f 66 74 2e 63 6f 6d 2f 65 6e 2d 75 73 2f 72 soft.com/en-us/r
0320: 65 73 65 61 72 63 68 2f 77 70 2d 63 6f 6e 74 65 esearch/wp-conte
0330: 6e 74 2f 75 70 6c 6f 61 64 73 2f 32 30 31 33 2f nt/uploads/2013/
0340: 30 36 2f 70 6c 64 69 30 39 37 2d 62 75 72 63 6b 06/pldi097-burck
0350: 68 61 72 64 74 2e 70 64 66 7c 49 74 e2 80 99 73 hardt.pdf|It...s
0360: 20 41 6c 69 76 65 21 20 43 6f 6e 74 69 6e 75 6f Alive! Continuo
0370: 75 73 20 46 65 65 64 62 61 63 6b 20 69 6e 20 55 us Feedback in U
0380: 49 20 50 72 6f 67 72 61 6d 6d 69 6e 67 5d 0d 0a I Programming]..
0390: 20 20 0d 0a 0d 0a 3c 68 33 3e 43 61 73 63 61 64 ....<h3>Cascad
03a0: 69 6e 67 20 53 74 79 6c 65 73 68 65 65 74 73 3c ing Stylesheets<
03b0: 2f 68 33 3e 0d 0a 20 20 2a 20 20 42 61 73 65 64 /h3>.. * Based
03c0: 20 6f 6e 20 5b 68 74 74 70 73 3a 2f 2f 77 77 77 on [https://www
03d0: 2e 77 33 2e 6f 72 67 2f 53 74 79 6c 65 2f 43 53 .w3.org/Style/CS
03e0: 53 2f 7c 43 53 53 5d 3c 68 33 3e 0d 0a 20 20 2a S/|CSS]<h3>.. *
03f0: 20 20 43 53 53 33 20 46 6c 65 78 62 6f 78 20 6c CSS3 Flexbox l
0400: 61 79 6f 75 74 73 21 0d 0a 20 20 2a 20 20 43 53 ayouts!.. * CS
0410: 53 33 20 54 72 61 6e 73 69 74 69 6f 6e 73 20 3b S3 Transitions ;
0420: 29 0d 0a 20 20 2a 20 20 43 53 53 33 20 67 72 69 ).. * CSS3 gri
0430: 64 20 28 70 6c 61 6e 6e 65 64 29 0d 0a 0d 0a 3c d (planned)....<
0440: 68 33 3e 53 63 68 65 6d 65 3c 2f 68 33 3e 0d 0a h3>Scheme</h3>..
0450: 20 20 2a 20 20 53 69 6d 70 6c 65 20 62 75 74 20 * Simple but
0460: 70 6f 77 65 72 66 75 6c 20 6c 61 6e 67 75 61 67 powerful languag
0470: 65 0d 0a 20 20 2a 20 20 52 45 50 4c 20 28 52 65 e.. * REPL (Re
0480: 61 64 20 45 76 61 6c 20 50 72 69 6e 74 20 4c 6f ad Eval Print Lo
0490: 6f 70 29 20 6d 65 61 6e 73 20 79 6f 75 20 64 6f op) means you do
04a0: 6e 27 74 20 6e 65 65 64 20 74 6f 20 72 65 73 74 n't need to rest
04b0: 61 72 74 20 74 68 65 20 70 72 6f 67 72 61 6d 20 art the program
04c0: 66 6f 72 20 73 65 65 69 6e 67 20 63 68 61 6e 67 for seeing chang
04d0: 65 73 2e 0d 0a 20 20 2a 20 20 57 65 20 61 63 74 es... * We act
04e0: 75 61 6c 6c 79 20 73 75 70 70 6f 72 74 20 63 68 ually support ch
04f0: 65 7a 20 73 63 68 65 6d 65 20 62 75 74 20 69 74 ez scheme but it
0500: 27 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 70 's possible to p
0510: 6f 72 74 20 74 6f 20 6f 74 68 65 72 73 20 73 63 ort to others sc
0520: 68 65 6d 65 73 0d 0a 0d 0a 3c 68 33 3e 4e 65 74 hemes....<h3>Net
0530: 77 6f 72 6b 20 52 45 50 4c 3c 2f 68 33 3e 0d 0a work REPL</h3>..
0540: 20 20 2a 20 20 4e 61 6e 6f 6d 73 67 20 6c 69 62 * Nanomsg lib
0550: 72 61 72 79 20 61 6c 6c 6f 77 73 20 74 6f 20 63 rary allows to c
0560: 6f 6e 6e 65 63 74 20 61 74 20 61 6e 79 20 6d 6f onnect at any mo
0570: 6d 65 6e 74 20 66 72 6f 6d 20 61 6e 79 77 68 65 ment from anywhe
0580: 72 65 20 74 6f 20 74 68 65 20 72 75 6e 74 69 6d re to the runtim
0590: 65 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 e to modify the
05a0: 63 6f 64 65 20 6f 6e 20 74 68 65 20 66 6c 79 20 code on the fly
05b0: 77 69 74 68 6f 75 74 20 6c 6f 6f 73 69 6e 67 20 without loosing
05c0: 73 74 61 74 65 2e 0d 0a 0d 0a 3c 68 33 3e 43 61 state.....<h3>Ca
05d0: 69 72 6f 3c 2f 68 33 3e 0d 0a 20 20 2a 20 20 4e iro</h3>.. * N
05e0: 69 63 65 20 67 72 61 70 68 69 63 73 20 77 69 74 ice graphics wit
05f0: 68 20 73 69 6d 70 6c 65 20 61 6e 64 20 70 6f 77 h simple and pow
0600: 65 72 66 75 6c 20 41 50 49 0d 0a 20 20 2a 20 20 erful API.. *
0610: 57 65 20 63 6f 75 6c 64 20 70 6f 72 74 20 74 68 We could port th
0620: 65 20 74 68 69 6e 67 20 74 6f 20 6f 70 65 6e 67 e thing to openg
0630: 6c 2c 20 47 44 49 2b 2c 20 58 63 62 20 69 66 20 l, GDI+, Xcb if
0640: 6e 65 65 64 65 64 0d 0a 0d 0a 3c 68 33 3e 53 44 needed....<h3>SD
0650: 4c 32 3c 2f 68 33 3e 0d 0a 20 20 2a 20 20 50 6f L2</h3>.. * Po
0660: 77 65 72 66 75 6c 20 61 6e 64 20 70 6f 72 74 61 werful and porta
0670: 62 6c 65 20 61 62 73 74 72 61 63 74 69 6f 6e 20 ble abstraction
0680: 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 76 69 64 for handling vid
0690: 65 6f 20 61 6e 64 20 69 6e 70 75 74 20 61 6e 64 eo and input and
06a0: 20 6d 75 63 68 20 6d 6f 72 65 0d 0a 20 20 2a 20 much more.. *
06b0: 20 43 6f 75 6c 64 20 62 65 20 72 65 70 6c 61 63 Could be replac
06c0: 65 64 20 77 69 74 68 20 73 6f 6d 65 20 6f 74 68 ed with some oth
06d0: 65 72 20 73 79 73 74 65 6d 20 6c 69 6b 65 20 58 er system like X
06e0: 63 62 2c 20 57 69 6e 33 32 20 41 50 49 2c 20 65 cb, Win32 API, e
06f0: 74 63 0d 0a 20 20 2a 20 20 57 68 79 20 6e 6f 74 tc.. * Why not
0700: 20 73 65 6e 64 20 74 68 65 20 66 72 61 6d 65 20 send the frame
0710: 74 6f 20 61 20 77 65 62 20 63 6c 69 65 6e 74 20 to a web client
0720: 61 6e 64 20 68 61 6e 64 6c 65 20 74 68 65 20 75 and handle the u
0730: 69 20 77 69 74 68 20 6a 61 76 61 73 63 72 69 70 i with javascrip
0740: 74 2e 20 54 68 69 73 20 63 6f 75 6c 64 20 62 65 t. This could be
0750: 20 64 6f 6e 65 20 77 69 74 68 20 63 61 69 72 6f done with cairo
0760: 20 72 65 6e 64 65 72 69 6e 67 20 61 6e 20 73 76 rendering an sv
0770: 67 20 6f 72 20 73 65 6e 64 69 6e 67 20 64 69 72 g or sending dir
0780: 65 63 74 79 20 73 6f 6d 65 20 68 74 6d 6c 2e 0d ecty some html..
0790: 0a 0d 0a 0d 0a 3c 68 32 3e 47 65 74 20 26 20 49 .....<h2>Get & I
07a0: 6e 73 74 61 6c 6c 3c 2f 68 32 3e 0d 0a 59 6f 75 nstall</h2>..You
07b0: 27 6c 6c 20 6e 65 65 64 20 5b 68 74 74 70 3a 2f 'll need [http:/
07c0: 2f 73 63 68 65 6d 65 2e 63 6f 6d 7c 63 68 65 7a /scheme.com|chez
07d0: 20 73 63 68 65 6d 65 5d 20 39 2e 34 20 61 6e 64 scheme] 9.4 and
07e0: 20 5b 68 74 74 70 73 3a 2f 2f 70 69 7a 7a 61 68 [https://pizzah
07f0: 61 63 6b 2e 65 75 2f 66 6f 73 73 69 6c 2f 74 68 ack.eu/fossil/th
0800: 75 6e 64 65 72 63 68 65 7a 7c 74 68 75 6e 64 65 underchez|thunde
0810: 72 63 68 65 7a 5d 0d 0a 52 65 71 75 69 72 65 64 rchez]..Required
0820: 20 61 6c 73 6f 20 5b 68 74 74 70 3a 2f 2f 6e 61 also [http://na
0830: 6e 6f 6d 73 67 2e 6f 72 67 7c 6e 61 6e 6f 6d 73 nomsg.org|nanoms
0840: 67 2d 31 2e 30 5d 2c 20 5b 68 74 74 70 73 3a 2f g-1.0], [https:/
0850: 2f 6c 69 62 73 64 6c 2e 6f 72 67 7c 73 64 6c 2d /libsdl.org|sdl-
0860: 32 2e 30 2e 34 5d 2c 20 5b 68 74 74 70 73 3a 2f 2.0.4], [https:/
0870: 2f 77 77 77 2e 63 61 69 72 6f 67 72 61 70 68 69 /www.cairographi
0880: 63 73 2e 6f 72 67 7c 63 61 69 72 6f 5d 0d 0a 0d cs.org|cairo]...
0890: 0a 43 68 65 63 6b 6f 75 74 3a 20 59 6f 75 27 6c .Checkout: You'l
08a0: 6c 20 6e 65 65 64 20 5b 68 74 74 70 73 3a 2f 2f l need [https://
08b0: 77 77 77 2e 66 6f 73 73 69 6c 2d 73 63 6d 2e 6f www.fossil-scm.o
08c0: 72 67 7c 66 6f 73 73 69 6c 5d 0d 0a 0d 0a 3c 76 rg|fossil]....<v
08d0: 65 72 62 61 74 69 6d 3e 0d 0a 66 6f 73 73 69 6c erbatim>..fossil
08e0: 20 63 6c 6f 6e 65 20 68 74 74 70 73 3a 2f 2f 70 clone https://p
08f0: 69 7a 7a 61 68 61 63 6b 2e 65 75 2f 66 6f 73 73 izzahack.eu/foss
0900: 69 6c 2f 6d 69 6f 67 75 69 20 6d 69 6f 67 75 69 il/miogui miogui
0910: 2e 66 6f 73 73 69 6c 0d 0a 6d 6b 64 69 72 20 6d .fossil..mkdir m
0920: 69 6f 67 75 69 20 26 26 20 63 64 20 6d 69 6f 67 iogui && cd miog
0930: 75 69 20 26 26 20 66 6f 73 73 69 6c 20 6f 70 65 ui && fossil ope
0940: 6e 20 2e 2e 2f 6d 69 6f 67 75 69 2e 66 6f 73 73 n ../miogui.foss
0950: 69 6c 0d 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d il..</verbatim>.
0960: 0a 0d 0a 59 6f 75 20 63 61 6e 20 61 6c 73 6f 20 ...You can also
0970: 64 6f 77 6e 6c 6f 61 64 20 74 68 65 20 6c 61 74 download the lat
0980: 65 73 74 20 63 6f 64 65 20 61 73 20 61 20 74 61 est code as a ta
0990: 72 62 61 6c 6c 3a 20 5b 68 74 74 70 73 3a 2f 2f rball: [https://
09a0: 70 69 7a 7a 61 68 61 63 6b 2e 65 75 2f 66 6f 73 pizzahack.eu/fos
09b0: 73 69 6c 2f 6d 69 6f 67 75 69 2f 74 61 72 62 61 sil/miogui/tarba
09c0: 6c 6c 2f 6d 69 6f 67 75 69 2d 6c 61 74 65 73 74 ll/miogui-latest
09d0: 2e 74 61 72 2e 67 7a 7c 6d 69 6f 67 75 69 2d 6c .tar.gz|miogui-l
09e0: 61 74 65 73 74 2e 74 61 72 2e 67 7a 5d 0d 0a 0d atest.tar.gz]...
09f0: 0a 52 65 6d 65 6d 62 65 72 20 74 6f 20 73 65 74 .Remember to set
0a00: 75 70 20 74 68 75 6e 64 65 72 63 68 65 7a 20 70 up thunderchez p
0a10: 72 6f 70 65 72 6c 79 2e 0d 0a 0d 0a 54 68 65 6e roperly.....Then
0a20: 20 72 75 6e 3a 0d 0a 3c 76 65 72 62 61 74 69 6d run:..<verbatim
0a30: 3e 0d 0a 23 20 49 20 72 65 63 6f 6d 6d 65 6e 64 >..# I recommend
0a40: 20 74 68 69 73 20 6c 69 6d 69 74 20 73 65 74 74 this limit sett
0a50: 69 6e 67 20 62 65 63 61 75 73 65 20 6f 75 72 20 ing because our
0a60: 73 6f 66 77 61 72 65 20 69 73 20 61 6c 70 68 61 sofware is alpha
0a70: 2e 20 49 66 20 79 6f 75 20 72 75 6e 20 69 6e 74 . If you run int
0a80: 6f 20 61 20 6e 6f 6e 2d 74 61 69 6c 20 72 65 63 o a non-tail rec
0a90: 75 72 73 69 6f 6e 20 79 6f 75 20 63 61 6e 20 6c ursion you can l
0aa0: 6f 63 6b 20 79 6f 75 72 20 73 79 73 74 65 6d 20 ock your system
0ab0: 3a 29 0d 0a 75 6c 69 6d 69 74 20 2d 53 76 20 31 :)..ulimit -Sv 1
0ac0: 30 30 30 30 30 30 0d 0a 73 63 68 65 6d 65 20 64 000000..scheme d
0ad0: 65 6d 6f 73 2f 64 65 6d 6f 31 2e 73 73 0d 0a 23 emos/demo1.ss..#
0ae0: 20 6f 72 0d 0a 73 63 68 65 6d 65 20 64 65 6d 6f or..scheme demo
0af0: 73 2f 64 65 6d 6f 32 2e 73 73 0d 0a 2e 2e 2e 0d s/demo2.ss......
0b00: 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 0d 0a .</verbatim>....
0b10: 4e 6f 77 20 73 77 69 74 63 68 20 74 6f 20 6f 74 Now switch to ot
0b20: 68 65 72 20 63 6f 6e 73 6f 6c 65 20 61 6e 64 20 her console and
0b30: 74 79 70 65 0d 0a 3c 76 65 72 62 61 74 69 6d 3e type..<verbatim>
0b40: 0d 0a 2f 70 61 74 68 2f 74 6f 2f 74 68 75 6e 64 ../path/to/thund
0b50: 65 72 63 68 65 7a 2f 6e 61 6e 6f 6d 73 67 2f 72 erchez/nanomsg/r
0b60: 65 6d 6f 74 65 2d 72 65 70 6c 20 74 63 70 3a 2f emote-repl tcp:/
0b70: 2f 6c 6f 63 61 6c 68 6f 73 74 3a 39 39 39 38 0d /localhost:9998.
0b80: 0a 3c 2f 76 65 72 62 61 74 69 6d 3e 0d 0a 46 72 .</verbatim>..Fr
0b90: 6f 6d 20 74 68 65 72 65 20 79 6f 75 20 63 61 6e om there you can
0ba0: 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 64 65 modify the code
0bb0: 2e 0d 0a 59 6f 75 20 69 64 65 61 6c 6c 79 20 77 ...You ideally w
0bc0: 61 6e 74 20 74 6f 20 72 75 6e 20 74 68 61 74 20 ant to run that
0bd0: 66 72 6f 6d 20 69 6e 73 69 64 65 20 65 6d 61 63 from inside emac
0be0: 73 20 4d 2d 78 20 72 75 6e 2d 73 63 68 65 6d 65 s M-x run-scheme
0bf0: 3c 2f 65 6d 3e 20 61 6e 64 20 73 65 6e 64 20 63 </em> and send c
0c00: 6f 64 65 20 77 69 74 68 20 43 2d 78 20 43 2d 65 ode with C-x C-e
0c10: 20 6f 72 20 43 2d 63 20 43 2d 65 0d 0a 0d 0a 54 or C-c C-e....T
0c20: 6f 20 66 6f 6c 6c 6f 77 20 6e 65 77 73 20 73 75 o follow news su
0c30: 62 73 63 72 69 62 65 20 74 6f 20 5b 68 74 74 70 bscribe to [http
0c40: 73 3a 2f 2f 70 69 7a 7a 61 68 61 63 6b 2e 65 75 s://pizzahack.eu
0c50: 2f 66 6f 73 73 69 6c 2f 6d 69 6f 67 75 69 2f 74 /fossil/miogui/t
0c60: 69 6d 65 6c 69 6e 65 2e 72 73 73 7c 52 53 53 20 imeline.rss|RSS
0c70: 66 65 65 64 5d 0a 5a 20 39 38 36 31 37 33 36 61 feed].Z 9861736a
0c80: 32 31 31 33 64 31 62 39 34 31 32 66 61 33 63 62 2113d1b9412fa3cb
0c90: 61 37 64 32 63 64 36 33 0a a7d2cd63.