Canvas and CanvasObject
In Fyne a Canvas
is the area which an application is drawn within.
Each window has a canvas which you can access with Window.Canvas()
but usually you will find functions on Window
that avoid accessing
the canvas.
Everything that can be drawn in Fyne is a type of CanvasObject
.
The example here opens a new window and then shows different types of
primitive graphical element by setting the content of the window canvas.
There are many ways that each type of object can be customised as
shown with the text and circle examples.
As well as changing the content shown using Canvas.SetContent()
it is
possible to change the content that is shown. If, for example, you
change the colour of a rectangle you can request a refresh of this
existing component using canvas.Refresh(rect)
.
Example Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 package main import ( "fyne.io/fyne" "fyne.io/fyne/app" "fyne.io/fyne/canvas" "fyne.io/fyne/theme" "image/color" "time" ) func main() { myApp := app.New() myWindow := myApp.NewWindow("Canvas") myCanvas := myWindow.Canvas() text := canvas.NewText("Text", color.White) text.TextStyle.Bold = true myCanvas.SetContent(text) go changeContent(myCanvas) myWindow.Resize(fyne.NewSize(100, 100)) myWindow.ShowAndRun() } func changeContent(c fyne.Canvas) { time.Sleep(time.Second * 2) c.SetContent(canvas.NewRectangle(color.Black)) time.Sleep(time.Second * 2) c.SetContent(canvas.NewLine(color.Gray{0x66})) time.Sleep(time.Second * 2) circle := canvas.NewCircle(color.White) circle.StrokeWidth = 4 circle.StrokeColor = color.RGBA{0xff, 0x33, 0x33, 0xff} c.SetContent(circle) time.Sleep(time.Second * 2) c.SetContent(canvas.NewImageFromResource(theme.FyneLogo())) }