func createIconButton(driver gxui.Driver, theme gxui.Theme, iconPath string) gxui.Button { button := theme.CreateButton() button.SetType(gxui.PushButton) fileBytes, err := assets.Asset(iconPath) if err != nil { log.Printf("Error: Failed to read asset %s: %s", iconPath, err) return button } f := bytes.NewBuffer(fileBytes) src, _, err := image.Decode(f) if err != nil { log.Printf("Error: Failed to decode image %s: %s", iconPath, err) return button } src = resize.Resize(24, 24, src, resize.Bilinear) rgba := image.NewRGBA(src.Bounds()) draw.Draw(rgba, src.Bounds(), src, image.ZP, draw.Src) texture := driver.CreateTexture(rgba, 1) icon := theme.CreateImage() icon.SetTexture(texture) button.AddChild(icon) return button }
func appMain(driver gxui.Driver) { theme := flags.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 font(driver gxui.Driver) gxui.Font { desiredFonts := settings.DesiredFonts() if len(desiredFonts) == 0 { return nil } fontReader, err := fonts.Load(desiredFonts...) if err != nil { log.Printf("Error searching for fonts %v: %s", desiredFonts, err) return nil } if closer, ok := fontReader.(io.Closer); ok { defer closer.Close() } fontBytes, err := ioutil.ReadAll(fontReader) if err != nil { log.Printf("Failed to read font file: %s", err) return nil } font, err := driver.CreateFont(fontBytes, 12) if err != nil { log.Printf("Could not parse font: %s", err) return nil } return font }
func CreateTheme(driver gxui.Driver) gxui.Theme { defaultFont, err := driver.CreateFont(gxfont.Default, 12) if err == nil { defaultFont.LoadGlyphs(32, 126) } else { fmt.Printf("Warning: Failed to load default font - %v\n", err) } defaultMonospaceFont, err := driver.CreateFont(gxfont.Monospace, 12) if err == nil { defaultFont.LoadGlyphs(32, 126) } else { fmt.Printf("Warning: Failed to load default monospace font - %v\n", err) } scrollBarRailDefaultBg := gxui.Black scrollBarRailDefaultBg.A = 0.7 scrollBarRailOverBg := gxui.Gray20 scrollBarRailOverBg.A = 0.7 neonBlue := gxui.ColorFromHex(0xFF5C8CFF) focus := gxui.ColorFromHex(0xA0C4D6FF) return &basic.Theme{ DriverInfo: driver, DefaultFontInfo: defaultFont, DefaultMonospaceFontInfo: defaultMonospaceFont, WindowBackground: gxui.Black, // fontColor brushColor penColor BubbleOverlayStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray20, gxui.Gray40, 1.0), ButtonDefaultStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray10, gxui.Gray20, 1.0), ButtonOverStyle: basic.CreateStyle(gxui.Gray90, gxui.Gray15, gxui.Gray50, 1.0), ButtonPressedStyle: basic.CreateStyle(gxui.Gray20, gxui.Gray70, gxui.Gray30, 1.0), CodeSuggestionListStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray20, gxui.Gray10, 1.0), DropDownListDefaultStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray10, gxui.Gray20, 1.0), DropDownListOverStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray15, gxui.Gray50, 1.0), FocusedStyle: basic.CreateStyle(gxui.Gray80, gxui.Transparent, focus, 1.0), HighlightStyle: basic.CreateStyle(gxui.Gray80, gxui.Transparent, neonBlue, 2.0), LabelStyle: basic.CreateStyle(gxui.Gray80, gxui.Transparent, gxui.Transparent, 0.0), PanelBackgroundStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray10, gxui.Gray15, 1.0), ScrollBarBarDefaultStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray30, gxui.Gray40, 1.0), ScrollBarBarOverStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray50, gxui.Gray60, 1.0), ScrollBarRailDefaultStyle: basic.CreateStyle(gxui.Gray80, scrollBarRailDefaultBg, gxui.Transparent, 1.0), ScrollBarRailOverStyle: basic.CreateStyle(gxui.Gray80, scrollBarRailOverBg, gxui.Gray20, 1.0), SplitterBarDefaultStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray10, gxui.Gray10, 1.0), SplitterBarOverStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray10, gxui.Gray50, 1.0), TabActiveHighlightStyle: basic.CreateStyle(gxui.Gray90, neonBlue, neonBlue, 0.0), TabDefaultStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray30, gxui.Gray40, 1.0), TabOverStyle: basic.CreateStyle(gxui.Gray90, gxui.Gray30, gxui.Gray50, 1.0), TabPressedStyle: basic.CreateStyle(gxui.Gray20, gxui.Gray70, gxui.Gray30, 1.0), TextBoxDefaultStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray10, gxui.Gray20, 1.0), TextBoxOverStyle: basic.CreateStyle(gxui.Gray80, gxui.Gray10, gxui.Gray50, 1.0), } }
func (w *Window) Init(outer WindowOuter, driver gxui.Driver, width, height int, title string) { w.Attachable.Init(outer) w.BackgroundBorderPainter.Init(outer) w.Container.Init(outer) w.Paddable.Init(outer) w.PaintChildren.Init(outer) w.outer = outer w.driver = driver w.onClose = gxui.CreateEvent(func() {}) w.onResize = gxui.CreateEvent(func() {}) w.onMouseMove = gxui.CreateEvent(func(gxui.MouseEvent) {}) w.onMouseEnter = gxui.CreateEvent(func(gxui.MouseEvent) {}) w.onMouseExit = gxui.CreateEvent(func(gxui.MouseEvent) {}) w.onMouseDown = gxui.CreateEvent(func(gxui.MouseEvent) {}) w.onMouseUp = gxui.CreateEvent(func(gxui.MouseEvent) {}) w.onMouseScroll = gxui.CreateEvent(func(gxui.MouseEvent) {}) w.onKeyDown = gxui.CreateEvent(func(gxui.KeyboardEvent) {}) w.onKeyUp = gxui.CreateEvent(func(gxui.KeyboardEvent) {}) w.onKeyRepeat = gxui.CreateEvent(func(gxui.KeyboardEvent) {}) w.onKeyStroke = gxui.CreateEvent(func(gxui.KeyStrokeEvent) {}) w.onClick = gxui.CreateEvent(func(gxui.MouseEvent) {}) w.onDoubleClick = gxui.CreateEvent(func(gxui.MouseEvent) {}) w.focusController = gxui.CreateFocusController(outer) w.mouseController = gxui.CreateMouseController(outer, w.focusController) w.keyboardController = gxui.CreateKeyboardController(outer) w.onResize.Listen(func() { w.outer.LayoutChildren() w.Draw() }) w.SetBorderPen(gxui.TransparentPen) w.setViewport(driver.CreateWindowedViewport(width, height, title)) // Window starts shown w.Attach() // Interface compliance test _ = gxui.Window(w) }
func appMain(driver gxui.Driver) { theme := flags.CreateTheme(driver) window := theme.CreateWindow(800, 600, "Polygon") window.SetScale(flags.DefaultScaleFactor) canvas := driver.CreateCanvas(math.Size{W: 1000, H: 1000}) drawStar(canvas, math.Point{X: 100, Y: 100}, 50, 0.2, 6) drawStar(canvas, math.Point{X: 650, Y: 170}, 70, 0.5, 7) drawStar(canvas, math.Point{X: 40, Y: 300}, 20, 0, 5) drawStar(canvas, math.Point{X: 410, Y: 320}, 25, 0.9, 5) drawStar(canvas, math.Point{X: 220, Y: 520}, 45, 0, 6) drawMoon(canvas, math.Point{X: 400, Y: 300}, 200) canvas.Complete() image := theme.CreateImage() image.SetCanvas(canvas) window.AddChild(image) 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(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) { args := flag.Args() if len(args) != 1 { fmt.Print("usage: image_viewer image-path\n") os.Exit(1) } file := args[0] f, err := os.Open(file) if err != nil { fmt.Printf("Failed to open image '%s': %v\n", file, err) os.Exit(1) } source, _, err := image.Decode(f) if err != nil { fmt.Printf("Failed to read image '%s': %v\n", file, err) os.Exit(1) } theme := flags.CreateTheme(driver) img := theme.CreateImage() mx := source.Bounds().Max window := theme.CreateWindow(mx.X, mx.Y, "Image viewer") window.SetScale(flags.DefaultScaleFactor) window.AddChild(img) // 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) img.SetTexture(texture) window.OnClose(driver.Terminate) }