diff --git a/main.go b/main.go index 3ab78e0..53bdbfd 100644 --- a/main.go +++ b/main.go @@ -943,11 +943,58 @@ func main() { tabs, ) - right := container.NewGridWithRows(3, - canvasImg, - heightmapImg, - bumpmapImg, - ) + right := container.NewMax() + var tappableCanvas, tappableHeightmap, tappableBumpmap *tappableImage + + updateRightPanel := func() { + var top, bottom fyne.CanvasObject + switch settings.ImageViewState { + case 1: + top = tappableCanvas + bottom = container.NewGridWithColumns(2, tappableHeightmap, tappableBumpmap) + case 2: + top = tappableHeightmap + bottom = container.NewGridWithColumns(2, tappableCanvas, tappableBumpmap) + case 3: + top = tappableBumpmap + bottom = container.NewGridWithColumns(2, tappableCanvas, tappableHeightmap) + default: + right.Objects = []fyne.CanvasObject{container.NewGridWithRows(3, tappableCanvas, tappableHeightmap, tappableBumpmap)} + right.Refresh() + return + } + split := container.NewVSplit(top, bottom) + split.Offset = 0.8 + right.Objects = []fyne.CanvasObject{split} + right.Refresh() + } + + tappableCanvas = newTappableImage(container.NewMax(canvasImg), func() { + if settings.ImageViewState == 1 { + settings.ImageViewState = 0 + } else { + settings.ImageViewState = 1 + } + updateRightPanel() + }) + tappableHeightmap = newTappableImage(container.NewMax(heightmapImg), func() { + if settings.ImageViewState == 2 { + settings.ImageViewState = 0 + } else { + settings.ImageViewState = 2 + } + updateRightPanel() + }) + tappableBumpmap = newTappableImage(container.NewMax(bumpmapImg), func() { + if settings.ImageViewState == 3 { + settings.ImageViewState = 0 + } else { + settings.ImageViewState = 3 + } + updateRightPanel() + }) + + updateRightPanel() split := container.NewHSplit( left, diff --git a/settings.go b/settings.go index cb64e79..8171270 100644 --- a/settings.go +++ b/settings.go @@ -56,6 +56,7 @@ type Settings struct { // General settings Seed int64 `json:"seed"` LastExportPath string `json:"last_export_path"` + ImageViewState int `json:"image_view_state"` } // Save saves the current settings to a JSON file in the user's config directory. @@ -141,6 +142,7 @@ func LoadSettings() (*Settings, error) { MaxBuildingComplexity: 3, BuildingComplexityRatio: 50, LastExportPath: homeDir, + ImageViewState: 0, }, nil } return nil, err diff --git a/tappable_image.go b/tappable_image.go new file mode 100644 index 0000000..56ea7a4 --- /dev/null +++ b/tappable_image.go @@ -0,0 +1,31 @@ +package main + +import ( + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/widget" +) + +type tappableImage struct { + widget.BaseWidget + image *fyne.Container + onTapped func() +} + +func newTappableImage(img *fyne.Container, tapped func()) *tappableImage { + ti := &tappableImage{ + image: img, + onTapped: tapped, + } + ti.ExtendBaseWidget(ti) + return ti +} + +func (t *tappableImage) CreateRenderer() fyne.WidgetRenderer { + return widget.NewSimpleRenderer(t.image) +} + +func (t *tappableImage) Tapped(*fyne.PointEvent) { + if t.onTapped != nil { + t.onTapped() + } +}