func appMain(driver gxui.Driver) { theme := dark.CreateTheme(driver) label := theme.CreateLabel() label.SetText("This is a progress bar:") progressBar := theme.CreateProgressBar() progressBar.SetDesiredSize(math.Size{W: 400, H: 20}) progressBar.SetTarget(100) layout := theme.CreateLinearLayout() layout.AddChild(label) layout.AddChild(progressBar) layout.SetHorizontalAlignment(gxui.AlignCenter) window := theme.CreateWindow(800, 600, "Progress bar") window.SetScale(flags.DefaultScaleFactor) window.AddChild(layout) window.OnClose(driver.Terminate) progress := 0 pause := time.Millisecond * 500 var timer *time.Timer timer = time.AfterFunc(pause, func() { driver.Call(func() { progress = (progress + 3) % progressBar.Target() progressBar.SetProgress(progress) timer.Reset(pause) }) }) }
func appMain(driver gxui.Driver) { theme := dark.CreateTheme(driver) window := theme.CreateWindow(ANIMATION_WIDTH, 2*ANIMATION_HEIGHT, "Pendulum") window.SetBackgroundBrush(gxui.CreateBrush(gxui.Gray50)) image := theme.CreateImage() ticker := time.NewTicker(time.Millisecond * 15) pendulum := &mathematicalPendulum{} pendulum2 := &numericalPendulum{PHI_ZERO, 0.0, 0.0, time.Time{}} go func() { for _ = range ticker.C { canvas := driver.CreateCanvas(math.Size{ANIMATION_WIDTH, 2 * ANIMATION_HEIGHT}) canvas.Clear(gxui.White) draw(pendulum, canvas, 0, 0) draw(pendulum2, canvas, 0, ANIMATION_HEIGHT) canvas.Complete() driver.Call(func() { image.SetCanvas(canvas) }) } }() window.AddChild(image) window.OnClose(ticker.Stop) window.OnClose(driver.Terminate) }
func appMain(driver gxui.Driver) { theme = light.CreateTheme(driver) window = theme.CreateWindow(800, 600, "Snake") playGround = field.Create(800, 600, 20, 20) sn = snake.Create(math.Point{X: 380, Y: 200}, math.Point{X: 380, Y: 280}, 20) drawScene(driver) fmt.Println(sn.Direction()) window.OnKeyUp(func(event gxui.KeyboardEvent) { dir := sn.Direction() key := event.Key switch { case key == gxui.KeyRight && dir == snake.Top: sn.TurnRight() case key == gxui.KeyRight && dir == snake.Bottom: sn.TurnLeft() case key == gxui.KeyLeft && dir == snake.Top: sn.TurnLeft() case key == gxui.KeyLeft && dir == snake.Bottom: sn.TurnRight() case key == gxui.KeyUp && dir == snake.Left: sn.TurnRight() case key == gxui.KeyUp && dir == snake.Right: sn.TurnLeft() case key == gxui.KeyDown && dir == snake.Left: sn.TurnLeft() case key == gxui.KeyDown && dir == snake.Right: sn.TurnRight() } }) ticker := time.NewTicker(time.Millisecond * 200) go func() { for _ = range ticker.C { driver.Call(func() { (&sn).Move() drawScene(driver) }) } }() window.OnClose(func() { driver.Terminate() ticker.Stop() }) }
func appMain(driver gxui.Driver) { theme := flags.CreateTheme(driver) font, err := driver.CreateFont(gxfont.Default, 75) if err != nil { panic(err) } window := theme.CreateWindow(380, 100, "Hi") window.SetBackgroundBrush(gxui.CreateBrush(gxui.Gray50)) label := theme.CreateLabel() label.SetFont(font) label.SetText("Hello world") window.AddChild(label) ticker := time.NewTicker(time.Millisecond * 30) go func() { phase := float32(0) for _ = range ticker.C { c := gxui.Color{ R: 0.75 + 0.25*math.Cosf((phase+0.000)*math.TwoPi), G: 0.75 + 0.25*math.Cosf((phase+0.333)*math.TwoPi), B: 0.75 + 0.25*math.Cosf((phase+0.666)*math.TwoPi), A: 0.50 + 0.50*math.Cosf(phase*10), } phase += 0.01 driver.Call(func() { label.SetColor(c) }) } }() window.OnClose(ticker.Stop) window.OnClose(driver.Terminate) }
func appMain(driver gxui.Driver) { theme := flags.CreateTheme(driver) font, err := driver.CreateFont(gxfont.Default, 75) if err != nil { panic(err) } window := theme.CreateWindow(800, 480, "Привет") window.SetBackgroundBrush(gxui.CreateBrush(gxui.Gray50)) window.SetBorderPen(gxui.Pen{Width: 5, Color: gxui.Yellow}) f, err := os.Open("wallpaper.jpg") if err != nil { fmt.Printf("Failed to open image %v\n", err) os.Exit(1) } source, _, err := image.Decode(f) if err != nil { fmt.Printf("Failed to open image %v\n", err) os.Exit(2) } wallpaper := theme.CreateImage() window.AddChild(wallpaper) // Copy the image to a RGBA format before handing to a gxui.Texture rgba := image.NewRGBA(source.Bounds()) draw.Draw(rgba, source.Bounds(), source, image.ZP, draw.Src) texture := driver.CreateTexture(rgba, 1) wallpaper.SetTexture(texture) layout := theme.CreateLinearLayout() layout.SetDirection(gxui.TopToBottom) window.AddChild(layout) label := theme.CreateLabel() label.SetFont(font) label.SetText("Здравствуй мир") label.OnMouseMove(func(e gxui.MouseEvent) { fmt.Printf("X=%d; Y=%d\n", e.Point.X, e.Point.Y) }) layout.AddChild(label) lTimer := theme.CreateLabel() lTimer.SetFont(font) lTimer.SetColor(gxui.Green30) layout.AddChild(lTimer) button := theme.CreateButton() button.SetText("Exit") button.SetPadding(math.Spacing{20, 10, 20, 10}) button.SetMargin(math.Spacing{20, 10, 20, 10}) button.OnClick(func(e gxui.MouseEvent) { window.Close() }) layout.AddChild(button) ticker := time.NewTicker(time.Millisecond * 30) go func() { phase := float32(0) for _ = range ticker.C { c := gxui.Color{ R: 0.75 + 0.25*math.Cosf((phase+0.000)*math.TwoPi), G: 0.75 + 0.25*math.Cosf((phase+0.333)*math.TwoPi), B: 0.75 + 0.25*math.Cosf((phase+0.666)*math.TwoPi), A: 0.50 + 0.50*math.Cosf(phase*10), } phase += 0.01 driver.Call(func() { label.SetColor(c) }) } }() ticker2 := time.NewTicker(time.Millisecond * 100) go func() { for t := range ticker.C { driver.Call(func() { lTimer.SetText(t.Format(time.Stamp)) }) } }() window.OnClose(ticker.Stop) window.OnClose(ticker2.Stop) window.OnClose(driver.Terminate) }