From 486b98ce11395a456a360ecffe21f8dcf41046de Mon Sep 17 00:00:00 2001 From: Maarten Heremans Date: Tue, 23 Apr 2024 09:35:21 +0200 Subject: [PATCH] Added canvas elements --- screen/canvas.go | 37 +++++++++---------------------- screen/container.go | 22 +----------------- screen/decorators.go | 53 ++++++++++++++++++++++++++++++++++++++++++++ screen/layout.go | 21 +----------------- screen/widget.go | 23 ++----------------- 5 files changed, 68 insertions(+), 88 deletions(-) create mode 100644 screen/decorators.go diff --git a/screen/canvas.go b/screen/canvas.go index b3d8314..4d8954d 100644 --- a/screen/canvas.go +++ b/screen/canvas.go @@ -5,12 +5,9 @@ import ( "fmt" "image/color" - "bitbucket.org/hevanto/ui/uiwidget" "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" - "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/data/binding" - "fyne.io/fyne/v2/layout" ) type Canvas string @@ -46,25 +43,7 @@ func (c Canvas) Build( return } - decorator = cnv - if e.Decorators != nil { - for _, dec := range e.Decorators { - switch dec { - case "Border": - decorator = uiwidget.NewWidgetBorder(decorator) - case "HCenter": - decorator = container.NewHBox( - layout.NewSpacer(), - decorator, - layout.NewSpacer()) - case "VCenter": - decorator = container.NewVBox( - layout.NewSpacer(), - decorator, - layout.NewSpacer()) - } - } - } + decorator = applyDecorators(e, cnv) if e.Hidden { decorator.Hide() @@ -76,10 +55,16 @@ func (c *Canvas) BuildImageCanvas( e *Element, s ScreenHandler, ) (obj fyne.CanvasObject, err error) { - img, err := AssetToImage(s, e.ImageName) - if err != nil { - err = fmt.Errorf("failed to load image: %w", err) - return + var img *canvas.Image + + if e.ImageName != "" { + img, err = AssetToImage(s, e.ImageName) + if err != nil { + err = fmt.Errorf("failed to load image: %w", err) + return + } + } else { + img = &canvas.Image{} } if e.Translucency != nil { img.Translucency = *e.Translucency diff --git a/screen/container.go b/screen/container.go index 726851f..ec2fc7b 100644 --- a/screen/container.go +++ b/screen/container.go @@ -4,10 +4,8 @@ import ( "errors" "fmt" - "bitbucket.org/hevanto/ui/uiwidget" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" - "fyne.io/fyne/v2/layout" ) // The constants for the Containers @@ -69,25 +67,7 @@ func (cnt Container) Build( return } - decorator = cont - if e.Decorators != nil { - for _, dec := range e.Decorators { - switch dec { - case "Border": - decorator = uiwidget.NewWidgetBorder(decorator) - case "HCenter": - decorator = container.NewHBox( - layout.NewSpacer(), - decorator, - layout.NewSpacer()) - case "VCenter": - decorator = container.NewVBox( - layout.NewSpacer(), - decorator, - layout.NewSpacer()) - } - } - } + decorator = applyDecorators(e, cont) if e.Hidden { decorator.Hide() diff --git a/screen/decorators.go b/screen/decorators.go new file mode 100644 index 0000000..d83cdf9 --- /dev/null +++ b/screen/decorators.go @@ -0,0 +1,53 @@ +package screen + +import ( + "bitbucket.org/hevanto/ui/uiwidget" + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/layout" +) + +func applyDecorators( + e *Element, + obj fyne.CanvasObject, +) ( + decorator fyne.CanvasObject, +) { + decorator = obj + if e.Decorators != nil { + for _, dec := range e.Decorators { + switch dec { + case "Border": + decorator = uiwidget.NewWidgetBorder(decorator) + case "HCenter": + decorator = container.NewHBox( + layout.NewSpacer(), + decorator, + layout.NewSpacer()) + case "HLeading": + decorator = container.NewHBox( + decorator, + layout.NewSpacer()) + case "HTrailing": + decorator = container.NewHBox( + layout.NewSpacer(), + decorator) + case "VCenter": + decorator = container.NewVBox( + layout.NewSpacer(), + decorator, + layout.NewSpacer()) + case "VLeading": + decorator = container.NewVBox( + decorator, + layout.NewSpacer()) + case "VTrailing": + decorator = container.NewVBox( + layout.NewSpacer(), + decorator) + } + } + } + + return +} diff --git a/screen/layout.go b/screen/layout.go index 82e0d7a..a1deecd 100644 --- a/screen/layout.go +++ b/screen/layout.go @@ -5,7 +5,6 @@ import ( "fmt" "bitbucket.org/hevanto/ui/uilayout" - "bitbucket.org/hevanto/ui/uiwidget" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/layout" @@ -113,25 +112,7 @@ func (l Layout) Build( return } - decorator = lay - if e.Decorators != nil { - for _, dec := range e.Decorators { - switch dec { - case "Border": - decorator = uiwidget.NewWidgetBorder(decorator) - case "HCenter": - decorator = container.NewHBox( - layout.NewSpacer(), - decorator, - layout.NewSpacer()) - case "VCenter": - decorator = container.NewVBox( - layout.NewSpacer(), - decorator, - layout.NewSpacer()) - } - } - } + decorator = applyDecorators(e, lay) if e.Hidden { decorator.Hide() diff --git a/screen/widget.go b/screen/widget.go index f7b1a8f..a8006a7 100644 --- a/screen/widget.go +++ b/screen/widget.go @@ -9,7 +9,6 @@ import ( "bitbucket.org/hevanto/ui/uiwidget" "fyne.io/fyne/v2" - "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/data/binding" "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/widget" @@ -256,25 +255,7 @@ func (w Widget) Build( return } - decorator = widget - if e.Decorators != nil { - for _, dec := range e.Decorators { - switch dec { - case "Border": - decorator = uiwidget.NewWidgetBorder(decorator) - case "HCenter": - decorator = container.NewHBox( - layout.NewSpacer(), - decorator, - layout.NewSpacer()) - case "VCenter": - decorator = container.NewVBox( - layout.NewSpacer(), - decorator, - layout.NewSpacer()) - } - } - } + decorator = applyDecorators(e, widget) if e.Hidden { decorator.Hide() @@ -322,7 +303,7 @@ func (w Widget) buildCalendarWidget( if e.TimeFormat != nil { timeFormat = parseTimeFormat(*e.TimeFormat) } - if t, err = time.Parse(timeFormat, *e.Time); err != nil { + if t, err = time.ParseInLocation(timeFormat, *e.Time, time.Local); err != nil { err = fmt.Errorf("CalendarWidget: failed to parse time: %w", err) return }