summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoop Kiefte <ikojba@gmail.com>2021-03-06 13:14:30 -0500
committerJoop Kiefte <ikojba@gmail.com>2021-03-06 13:14:30 -0500
commit2ed0ff326260d5385d5b76f1670a204756b41e90 (patch)
tree05e4a0ed5f0cd543aa31b8ea688622632433049f
parent82f482bc42a3328d06999e21239fbe1f3bea104f (diff)
Non-functional setup trialHEADmain
-rw-r--r--Courier-Prime-Bold-Italic.ttfbin0 -> 173528 bytes
-rw-r--r--Courier-Prime-Bold.ttfbin0 -> 167004 bytes
-rw-r--r--Courier-Prime-Italic.ttfbin0 -> 164044 bytes
-rw-r--r--Courier-Prime.ttfbin0 -> 155028 bytes
-rw-r--r--example.fountain25
-rw-r--r--go.mod5
-rw-r--r--go.sum89
-rw-r--r--main.go87
8 files changed, 206 insertions, 0 deletions
diff --git a/Courier-Prime-Bold-Italic.ttf b/Courier-Prime-Bold-Italic.ttf
new file mode 100644
index 0000000..1ec7d2a
--- /dev/null
+++ b/Courier-Prime-Bold-Italic.ttf
Binary files differ
diff --git a/Courier-Prime-Bold.ttf b/Courier-Prime-Bold.ttf
new file mode 100644
index 0000000..190fde7
--- /dev/null
+++ b/Courier-Prime-Bold.ttf
Binary files differ
diff --git a/Courier-Prime-Italic.ttf b/Courier-Prime-Italic.ttf
new file mode 100644
index 0000000..c5b8d52
--- /dev/null
+++ b/Courier-Prime-Italic.ttf
Binary files differ
diff --git a/Courier-Prime.ttf b/Courier-Prime.ttf
new file mode 100644
index 0000000..f4f7b03
--- /dev/null
+++ b/Courier-Prime.ttf
Binary files differ
diff --git a/example.fountain b/example.fountain
new file mode 100644
index 0000000..a272219
--- /dev/null
+++ b/example.fountain
@@ -0,0 +1,25 @@
+Title: Example Screenplay
+Author: Fountain Typewriter
+
+INT. WRITING TABLE
+
+ SCREENWRITER
+ I have used a fountain pen before, and typewriters. But what does it mean to use Fountain Typewriter?
+
+Slowly a beautiful screenplay starts to emerge.
+
+ CUT TO:
+
+EXT. FOUNTAIN AVE
+
+SCREENWRITER is on their way to Hollywood. Nobody can stop them now!
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc eget dolor arcu. Donec ac semper nisl. Praesent at diam sit amet erat accumsan mollis. Integer vel semper elit. Praesent et nisl non felis egestas cursus ut sed velit. Vivamus magna lacus, posuere ut aliquam in, gravida at magna. Ut sit amet sapien nisi.
+
+Ut vehicula, quam rutrum consequat venenatis, justo ex ultricies felis, sit amet volutpat nibh leo ut urna. Maecenas non diam ut lectus vulputate lobortis. In elit augue, faucibus non placerat id, condimentum sit amet quam. Curabitur nec risus nec ante hendrerit fermentum a sed turpis. Nulla ultrices ex et felis luctus sollicitudin. Sed sollicitudin nulla eu ipsum consequat molestie. Mauris consectetur quam ut cursus sodales. Nulla facilisi. Aliquam ut tempus arcu, non interdum magna.
+
+Donec et nunc in leo tincidunt imperdiet. Nam justo ex, mattis non velit sed, luctus laoreet odio. Nunc eu quam vitae neque tristique vehicula non at enim. Donec nisi massa, sodales eget cursus sit amet, cursus in justo. Vivamus in maximus purus, non lacinia tortor. Proin tempus id turpis sit amet laoreet. Nullam semper sed urna vitae fringilla. Sed volutpat quis turpis eget sagittis. Aliquam quis efficitur purus. Vestibulum scelerisque dui id metus interdum feugiat. Pellentesque at ultricies purus, ac eleifend metus. Aliquam ut nunc et dui consequat tincidunt at sagittis metus. Sed justo quam, fermentum id sem ultrices, pellentesque placerat ipsum. Vivamus vulputate suscipit velit a tempor. Suspendisse condimentum eros libero, nec mattis leo varius a. Sed nec consectetur mauris.
+
+Donec tincidunt, lectus sed sollicitudin dictum, massa nisi sollicitudin mauris, quis tristique dui quam ut enim. Nulla gravida sollicitudin scelerisque. Integer facilisis neque odio, ut imperdiet justo tincidunt eget. Aliquam nisl quam, fermentum ut condimentum non, faucibus ac ex. Maecenas eu finibus odio. Nunc lorem justo, tempor vitae risus at, commodo cursus justo. Aenean sit amet felis ac augue dapibus pellentesque. Curabitur pretium turpis vel lectus tempus vulputate. Praesent in congue ante. Vestibulum iaculis metus sit amet lobortis facilisis. Mauris eget scelerisque turpis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer nec odio vehicula, vehicula tortor nec, placerat elit. Phasellus volutpat felis velit, et malesuada felis lobortis vel. Morbi efficitur sit amet lectus non ullamcorper.
+
+Aliquam erat volutpat. Pellentesque aliquam sagittis ex fermentum commodo. Suspendisse nec tincidunt ipsum. Sed et sem ultrices, egestas mi nec, interdum nisl. In porta lorem et risus ultricies, eu tempor erat dignissim. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque molestie imperdiet ipsum, quis pellentesque tellus porttitor nec. Maecenas tempus imperdiet sem ultricies porttitor. In eleifend laoreet est, nec luctus nisi posuere non. Aliquam non turpis sapien. Aliquam eu mauris sit amet tortor rutrum posuere non vel mauris. Integer efficitur quam vel lobortis auctor.
diff --git a/go.mod b/go.mod
index d7572cc..5c21d50 100644
--- a/go.mod
+++ b/go.mod
@@ -1,3 +1,8 @@
module git.kiefte.eu/lapingvino/fountaintypewriter
go 1.17
+
+require (
+ fyne.io/fyne/v2 v2.0.1
+ github.com/lapingvino/lexington v0.9.0
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..3932af6
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,89 @@
+fyne.io/fyne/v2 v2.0.1 h1:GlW2AHAt3CK5l/cpr0jPfsxWFgNo751yaLk/v3+v888=
+fyne.io/fyne/v2 v2.0.1/go.mod h1:Q12wKzvdrCct+tkaJcMuTmcyDz4ZDjc6+/llerrFnFc=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/Kodeworks/golang-image-ico v0.0.0-20141118225523-73f0f4cfade9/go.mod h1:7uhhqiBaR4CpN0k9rMjOtjpcfGd6DG2m04zQxKnWQ0I=
+github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c=
+github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3 h1:FDqhDm7pcsLhhWl1QtD8vlzI4mm59llRvNzrFg6/LAA=
+github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3/go.mod h1:CzM2G82Q9BDUvMTGHnXf/6OExw/Dz2ivDj48nVg7Lg8=
+github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/fyne-io/mobile v0.1.2 h1:0HaXDtOOwyOTn3Umi0uKVCOgJtfX73c6unC4U8i5VZU=
+github.com/fyne-io/mobile v0.1.2/go.mod h1:/kOrWrZB6sasLbEy2JIvr4arEzQTXBTZGb3Y96yWbHY=
+github.com/go-bindata/go-bindata v3.1.2+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo=
+github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7 h1:SCYMcCJ89LjRGwEa0tRluNRiMjZHalQZrVrvTbPh+qw=
+github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200625191551-73d3c3675aa3 h1:q521PfSp5/z6/sD9FZZOWj4d1MLmfQW8PkRnI9M6PCE=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200625191551-73d3c3675aa3/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME=
+github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff h1:W71vTCKoxtdXgnm1ECDFkfQnpdqAO00zzGXLA5yaEX8=
+github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff/go.mod h1:wfqRWLHRBsRgkp5dmbG56SA0DmVtwrF5N3oPdI8t+Aw=
+github.com/jackmordaunt/icns v0.0.0-20181231085925-4f16af745526/go.mod h1:UQkeMHVoNcyXYq9otUupF7/h/2tmHlhrS2zw7ZVvUqc=
+github.com/josephspurrier/goversioninfo v0.0.0-20200309025242-14b0ab84c6ca/go.mod h1:eJTEwMjXb7kZ633hO3Ln9mBUCOjX2+FlTljvpl9SYdE=
+github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/lapingvino/lexington v0.9.0 h1:ojJoscwuLVcIjdpfaYZCDG2KExyY308iHxK4UC3d2nQ=
+github.com/lapingvino/lexington v0.9.0/go.mod h1:BMcYDdOtc7SRtDOwJegPRfCdvlSKF6CLFi1UC896yk8=
+github.com/lucor/goinfo v0.0.0-20200401173949-526b5363a13a/go.mod h1:ORP3/rB5IsulLEBwQZCJyyV6niqmI7P4EWSmkug+1Ng=
+github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY=
+github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
+github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564 h1:HunZiaEKNGVdhTRQOVpMmj5MQnGnv+e8uZNu3xFLgyM=
+github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564/go.mod h1:afMbS0qvv1m5tfENCwnOdZGOF8RGR/FsZ7bvBxQGZG4=
+github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9 h1:m59mIOBO4kfcNCEzJNy71UkeF4XIx2EVmL9KLwDQdmM=
+github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9/go.mod h1:mvWM0+15UqyrFKqdRjY6LuAVJR0HOVhJlEgZ5JWtSWU=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/image v0.0.0-20200430140353-33d19683fad8 h1:6WW6V3x1P/jokJBpRQYUJnMHRP6isStQwCozxnU7XQw=
+golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666 h1:gVCS+QOncANNPlmlO1AhlU3oxs4V9z+gTtPwIk3p2N8=
+golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190808195139-e713427fea3f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200328031815-3db5fc6bac03/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..a713fa5
--- /dev/null
+++ b/main.go
@@ -0,0 +1,87 @@
+package main
+
+import (
+ "embed"
+ "strings"
+ "image/color"
+
+ "fyne.io/fyne/v2"
+ "fyne.io/fyne/v2/app"
+ "fyne.io/fyne/v2/container"
+ "fyne.io/fyne/v2/widget"
+ "fyne.io/fyne/v2/theme"
+
+ "github.com/lapingvino/lexington/lex"
+)
+
+var screenplay lex.Screenplay
+
+type font struct {
+ name string
+ contents []byte
+}
+
+func (f font) Name() string {
+ return f.name
+}
+
+func (f font) Content() []byte {
+ return f.contents
+}
+
+func getfont(name string) font {
+ f, err := fonts.ReadFile(strings.ReplaceAll(name, " ", "-") + ".ttf")
+ if err != nil {
+ panic("fonts not loaded correctly: " + err.Error())
+ }
+ return font{name, f}
+}
+
+//go:embed *.ttf
+var fonts embed.FS
+
+//go:embed example.fountain
+var example string
+
+type fttheme struct{}
+
+func (fttheme) Color(c fyne.ThemeColorName, v fyne.ThemeVariant) color.Color {
+ return theme.DefaultTheme().Color(c, v)
+}
+
+func (fttheme) Font(s fyne.TextStyle) fyne.Resource {
+ switch {
+ case s.Bold && s.Italic:
+ return getfont("Courier Prime Bold Italic")
+ case s.Bold:
+ return getfont("Courier Prime Bold")
+ case s.Italic:
+ return getfont("Courier Prime Italic")
+ default:
+ return getfont("Courier Prime")
+ }
+}
+
+func (fttheme) Icon(i fyne.ThemeIconName) fyne.Resource {
+ return theme.DefaultTheme().Icon(i)
+}
+
+func (fttheme) Size(s fyne.ThemeSizeName) float32 {
+ return theme.DefaultTheme().Size(s)
+}
+
+func main() {
+ a := app.New()
+ w := a.NewWindow("Fountain Typewriter")
+ a.Settings().SetTheme(fttheme{})
+
+ display := widget.NewLabel(example)
+ display.Wrapping = fyne.TextWrapWord
+ entry := widget.NewEntry()
+ content := container.NewVScroll(container.NewVBox(display, entry))
+
+ w.SetFullScreen(true)
+ w.SetContent(content)
+
+ w.ShowAndRun()
+}