Image element for showing images
This commit is contained in:
		
							parent
							
								
									6e7cf285cc
								
							
						
					
					
						commit
						cfc2b5e130
					
				
							
								
								
									
										23
									
								
								elements/basic/image.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								elements/basic/image.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					package basicElements
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "image"
 | 
				
			||||||
 | 
					import "git.tebibyte.media/sashakoshka/tomo/artist"
 | 
				
			||||||
 | 
					import "git.tebibyte.media/sashakoshka/tomo/elements/core"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Image struct {
 | 
				
			||||||
 | 
						*core.Core
 | 
				
			||||||
 | 
						core core.CoreControl
 | 
				
			||||||
 | 
						buffer artist.Pattern
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewImage (image image.Image) (element *Image) {
 | 
				
			||||||
 | 
						element = &Image { buffer: artist.NewTexture(image) }
 | 
				
			||||||
 | 
						element.Core, element.core = core.NewCore(element.draw)
 | 
				
			||||||
 | 
						bounds := image.Bounds()
 | 
				
			||||||
 | 
						element.core.SetMinimumSize(bounds.Dx(), bounds.Dy())
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (element *Image) draw () {
 | 
				
			||||||
 | 
						artist.FillRectangle(element, element.buffer, element.Bounds())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										58
									
								
								examples/image/image.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								examples/image/image.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "os"
 | 
				
			||||||
 | 
					import "image"
 | 
				
			||||||
 | 
					import "bytes"
 | 
				
			||||||
 | 
					import _ "image/png"
 | 
				
			||||||
 | 
					import "github.com/jezek/xgbutil/gopher"
 | 
				
			||||||
 | 
					import "git.tebibyte.media/sashakoshka/tomo"
 | 
				
			||||||
 | 
					import "git.tebibyte.media/sashakoshka/tomo/popups"
 | 
				
			||||||
 | 
					import "git.tebibyte.media/sashakoshka/tomo/layouts/basic"
 | 
				
			||||||
 | 
					import "git.tebibyte.media/sashakoshka/tomo/elements/basic"
 | 
				
			||||||
 | 
					import _ "git.tebibyte.media/sashakoshka/tomo/backends/x"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func main () {
 | 
				
			||||||
 | 
						tomo.Run(run)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func run () {
 | 
				
			||||||
 | 
						window, _ := tomo.NewWindow(2, 2)
 | 
				
			||||||
 | 
						window.SetTitle("Tomo Logo")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						file, err := os.Open("assets/banner.png")
 | 
				
			||||||
 | 
						if err != nil { fatalError(err); return  }
 | 
				
			||||||
 | 
						logo, _, err := image.Decode(file)
 | 
				
			||||||
 | 
						file.Close()
 | 
				
			||||||
 | 
						if err != nil { fatalError(err); return  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						container := basicElements.NewContainer(basicLayouts.Vertical { true, true })
 | 
				
			||||||
 | 
						logoImage := basicElements.NewImage(logo)
 | 
				
			||||||
 | 
						button    := basicElements.NewButton("Show me a gopher instead")
 | 
				
			||||||
 | 
						button.OnClick (func () { container.Warp (func () {
 | 
				
			||||||
 | 
								container.DisownAll()
 | 
				
			||||||
 | 
								gopher, _, err :=
 | 
				
			||||||
 | 
									image.Decode(bytes.NewReader(gopher.GopherPng()))
 | 
				
			||||||
 | 
								if err != nil { fatalError(err); return }
 | 
				
			||||||
 | 
								container.Adopt(basicElements.NewImage(gopher),true)
 | 
				
			||||||
 | 
						}) })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						container.Adopt(logoImage, true)
 | 
				
			||||||
 | 
						container.Adopt(button, false)
 | 
				
			||||||
 | 
						window.Adopt(container)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						button.Focus()
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						window.OnClose(tomo.Stop)
 | 
				
			||||||
 | 
						window.Show()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func fatalError (err error) {
 | 
				
			||||||
 | 
						popups.NewDialog (
 | 
				
			||||||
 | 
							popups.DialogKindError,
 | 
				
			||||||
 | 
							"Error",
 | 
				
			||||||
 | 
							err.Error(),
 | 
				
			||||||
 | 
							popups.Button {
 | 
				
			||||||
 | 
								Name: "OK",
 | 
				
			||||||
 | 
								OnPress: tomo.Stop,
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
					} 
 | 
				
			||||||
		Reference in New Issue
	
	Block a user