File: main.go

package info (click to toggle)
golang-golang-x-exp 0.0~git20230522.2e198f4-1~bpo12%2B1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-backports
  • size: 6,404 kB
  • sloc: ansic: 1,900; objc: 276; sh: 272; asm: 48; makefile: 26
file content (84 lines) | stat: -rw-r--r-- 2,109 bytes parent folder | download | duplicates (4)
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build example
// +build example

//
// This build tag means that "go install golang.org/x/exp/shiny/..." doesn't
// install this example program. Use "go run main.go" to run it or "go install
// -tags=example" to install it.

// Widgetgallery exhibits the shiny/widget package's widget set.
package main

import (
	"image"
	"image/color"
	"image/draw"
	"log"

	"golang.org/x/exp/shiny/driver"
	"golang.org/x/exp/shiny/gesture"
	"golang.org/x/exp/shiny/screen"
	"golang.org/x/exp/shiny/widget"
	"golang.org/x/exp/shiny/widget/node"
)

var uniforms = [...]*image.Uniform{
	image.NewUniform(color.RGBA{0xbf, 0x00, 0x00, 0xff}),
	image.NewUniform(color.RGBA{0x9f, 0x9f, 0x00, 0xff}),
	image.NewUniform(color.RGBA{0x00, 0xbf, 0x00, 0xff}),
	image.NewUniform(color.RGBA{0x00, 0x9f, 0x9f, 0xff}),
	image.NewUniform(color.RGBA{0x00, 0x00, 0xbf, 0xff}),
	image.NewUniform(color.RGBA{0x9f, 0x00, 0x9f, 0xff}),
}

// custom is a custom widget.
type custom struct {
	node.LeafEmbed
	index int
}

func newCustom() *custom {
	w := &custom{}
	w.Wrapper = w
	return w
}

func (w *custom) OnInputEvent(e interface{}, origin image.Point) node.EventHandled {
	switch e := e.(type) {
	case gesture.Event:
		if e.Type != gesture.TypeTap {
			break
		}
		w.index++
		if w.index == len(uniforms) {
			w.index = 0
		}
		w.Mark(node.MarkNeedsPaintBase)
	}
	return node.Handled
}

func (w *custom) PaintBase(ctx *node.PaintBaseContext, origin image.Point) error {
	w.Marks.UnmarkNeedsPaintBase()
	draw.Draw(ctx.Dst, w.Rect.Add(origin), uniforms[w.index], image.Point{}, draw.Src)
	return nil
}

func main() {
	log.SetFlags(0)
	driver.Main(func(s screen.Screen) {
		// TODO: create a bunch of standard widgets: buttons, labels, etc.
		w := widget.NewSheet(newCustom())
		if err := widget.RunWindow(s, w, &widget.RunWindowOptions{
			NewWindowOptions: screen.NewWindowOptions{
				Title: "WidgetGallery Shiny Example",
			},
		}); err != nil {
			log.Fatal(err)
		}
	})
}