From 20a32ab9705c8ce1df18343b6e9662e752cdef06 Mon Sep 17 00:00:00 2001
From: "Andrew E. Torda" <torda@zbh.uni-hamburg.de>
Date: Thu, 27 Jan 2022 09:19:45 +0100
Subject: [PATCH] Have to check in, before an experiment

---
 mc_work/dorun.go   | 15 ++++++++-------
 mc_work/plot.go    |  4 ++--
 mc_work/scrnplt.go | 14 --------------
 ui/scrnplt.go      | 32 ++++++++++++++++++++++++++++++++
 4 files changed, 42 insertions(+), 23 deletions(-)
 delete mode 100644 mc_work/scrnplt.go
 create mode 100644 ui/scrnplt.go

diff --git a/mc_work/dorun.go b/mc_work/dorun.go
index d1f095b..01ad5a1 100644
--- a/mc_work/dorun.go
+++ b/mc_work/dorun.go
@@ -12,6 +12,7 @@ import (
 	"sync"
 
 	"example.com/ackley_mc/ackley"
+	"example.com/ackley_mc/ui"
 )
 
 const (
@@ -48,7 +49,7 @@ type cprm struct { // parameters calculated from input
 	plotXtrj   []float32      // for plotting trajectories
 	coolme     bool           // Cooling ? or just constant temperature ?
 	fplotWrt   io.WriteCloser // Where to write the plot of function values
-	fplotiobuf *bytes.Buffer  // The buffer possibly behind fplotWrt
+	fplotbuf   *bytes.Buffer  // The buffer possibly behind fplotWrt
 	xplotme    bool           // Are we plotting X trajectories
 }
 
@@ -101,7 +102,7 @@ func setupRun(mcPrm *mcPrm, cprm *cprm) error {
 	}
 
 	if mcPrm.fPltName != "" { // Then we are writing to a file
-		if mcPrm.fPltName, err = setSuffix(mcPrm.fPltName, ".png"); err != nil {
+		if mcPrm.fPltName, err = setSuffix(mcPrm.fPltName, ".svg"); err != nil {
 			return fmt.Errorf("plot filename: %w", err)
 		}
 		if cprm.fplotWrt, err = os.Create(mcPrm.fPltName); err != nil {
@@ -110,7 +111,7 @@ func setupRun(mcPrm *mcPrm, cprm *cprm) error {
 	} else { // Must be writing to a screen
 		var w bytes.Buffer           // could be fancy, preallocate and use bytes.Newbuffer
 		cprm.fplotWrt = addClose(&w) // Fix this, effectively two copies
-		cprm.fplotiobuf = &w         // of the pointer
+		cprm.fplotbuf = &w         // of the pointer
 	}
 	n_alloc := mcPrm.nStep / 5 // About a fifth of the number of steps
 	cprm.plotnstp = make([]float64, 0, n_alloc)
@@ -120,7 +121,7 @@ func setupRun(mcPrm *mcPrm, cprm *cprm) error {
 	}
 
 	if mcPrm.xPltName != "" {
-		if mcPrm.xPltName, err = setSuffix(mcPrm.xPltName, ".png"); err != nil {
+		if mcPrm.xPltName, err = setSuffix(mcPrm.xPltName, ".svg"); err != nil {
 			return fmt.Errorf("plot filename: %w", err)
 		}
 		cprm.xplotme = true
@@ -272,9 +273,9 @@ func doRun(mcPrm *mcPrm) error {
 		return err
 	}
 
-	if cprm.fplotiobuf != nil {
-		fmt.Println("len", cprm.fplotiobuf.Len())
-		scrnplt(cprm.fplotiobuf.Bytes())
+	if cprm.fplotbuf != nil {
+		fmt.Println("len", cprm.fplotbuf.Len())
+		ui.Scrnplt(cprm.fplotbuf.Bytes())
 	}
 	if err := plotxWrt(&cprm, mcPrm.xPltName, len(mcPrm.xIni)); err != nil {
 		return err
diff --git a/mc_work/plot.go b/mc_work/plot.go
index c3cb773..0263060 100644
--- a/mc_work/plot.go
+++ b/mc_work/plot.go
@@ -143,7 +143,7 @@ func plotfWrt(cprm *cprm) error {
 		},
 	}
 
-	if err := graph.Render(chart.PNG, cprm.fplotWrt); err != nil {
+	if err := graph.Render(chart.SVG, cprm.fplotWrt); err != nil {
 		return fmt.Errorf("Render: %w", err)
 	}
 
@@ -201,7 +201,7 @@ func plotxWrt(cprm *cprm, xPltName string, ndim int) error {
 		return err
 	}
 	defer xPlt.Close()
-	if err := graph.Render(chart.PNG, xPlt); err != nil {
+	if err := graph.Render(chart.SVG, xPlt); err != nil {
 		return fmt.Errorf("plotting X trajectories: %w", err)
 	}
 	return nil
diff --git a/mc_work/scrnplt.go b/mc_work/scrnplt.go
deleted file mode 100644
index ca3f833..0000000
--- a/mc_work/scrnplt.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// 25 Jan 2020
-// Given a buffer or two with a plot picture, send it to the screen
-
-// I think this might be better in its own package
-package mc_work
-
-import (
-
-	"fmt"
-)
-
-func scrnplt (b []byte) {
-	fmt.Println ("scrnplt says hello, buf size", len(b))
-}
diff --git a/ui/scrnplt.go b/ui/scrnplt.go
new file mode 100644
index 0000000..470aa0e
--- /dev/null
+++ b/ui/scrnplt.go
@@ -0,0 +1,32 @@
+// 25 Jan 2020
+// Given a buffer or two with a plot picture, send it to the screen
+
+// I think this might be better in its own package
+package ui
+
+import (
+	"bytes"
+	"fmt"
+	"image/color" // need this for the green ?
+		"fyne.io/fyne/v2"
+	"fyne.io/fyne/v2/app"
+	"fyne.io/fyne/v2/canvas"
+	"fyne.io/fyne/v2/container"
+)
+
+func Scrnplt (b []byte) {
+	fmt.Println ("scrnplt says buf size", len(b), "first few bytes:", string(b[:10]))
+	a := app.New()
+	w := a.NewWindow("container")
+	image := canvas.NewImageFromReader(bytes.NewReader(b), "boo.svg")
+	green := color.NRGBA{R: 0, G: 180, B: 0, A: 255}
+	text1 := canvas.NewText("Hello", green); print(text1)
+	text2 := canvas.NewText("There", green)
+	text2.Move(fyne.NewPos(20, 20))
+	content := container.NewWithoutLayout( image) // no more text 1, text2
+	// content := container.New(layout.NewGridLayout(2), text1, text2)
+
+	w.SetContent(content)
+
+	w.ShowAndRun()
+}
-- 
GitLab