We have text
This commit is contained in:
		
							parent
							
								
									d26845a4d6
								
							
						
					
					
						commit
						93b02b4628
					
				| @ -1,7 +1,10 @@ | |||||||
| package x | package x | ||||||
| 
 | 
 | ||||||
| import "image" | import "image" | ||||||
|  | import "image/draw" | ||||||
|  | import "image/color" | ||||||
| import "golang.org/x/image/font" | import "golang.org/x/image/font" | ||||||
|  | import "golang.org/x/image/math/fixed" | ||||||
| import "golang.org/x/image/font/basicfont" | import "golang.org/x/image/font/basicfont" | ||||||
| 
 | 
 | ||||||
| import "github.com/jezek/xgb" | import "github.com/jezek/xgb" | ||||||
| @ -12,7 +15,6 @@ import "github.com/jezek/xgbutil/xevent" | |||||||
| import "github.com/jezek/xgbutil/xwindow" | import "github.com/jezek/xgbutil/xwindow" | ||||||
| import "github.com/jezek/xgbutil/xgraphics" | import "github.com/jezek/xgbutil/xgraphics" | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| import "git.tebibyte.media/sashakoshka/stone" | import "git.tebibyte.media/sashakoshka/stone" | ||||||
| 
 | 
 | ||||||
| type Backend struct { | type Backend struct { | ||||||
| @ -47,6 +49,28 @@ type Backend struct { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | type fakeImage struct { | ||||||
|  | 	color color.Color | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (fake fakeImage) ColorModel () (model color.Model) { | ||||||
|  | 	model = color.RGBAModel | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (fake fakeImage) Bounds () (bounds image.Rectangle) { | ||||||
|  | 	bounds.Max = image.Point { | ||||||
|  | 		X: 1024, | ||||||
|  | 		Y: 1024, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (fake fakeImage) At (x, y int) (pixel color.Color) { | ||||||
|  | 	pixel = fake.color | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (backend *Backend) Run (channel chan(stone.Event)) { | func (backend *Backend) Run (channel chan(stone.Event)) { | ||||||
| 	backend.channel = channel | 	backend.channel = channel | ||||||
| 	 | 	 | ||||||
| @ -195,19 +219,56 @@ func (backend *Backend) reallocateCanvas () { | |||||||
| 	backend.canvas.For (func (x, y int) xgraphics.BGRA { | 	backend.canvas.For (func (x, y int) xgraphics.BGRA { | ||||||
| 		return backend.colors[stone.ColorApplication] | 		return backend.colors[stone.ColorApplication] | ||||||
| 	}) | 	}) | ||||||
| 	// FIXME (?): this doesn't work. if it were to work, it | 	 | ||||||
| 	// would possibly be a cleaner way to resize the canvas. | 	backend.drawRune(0, 0, 'T') | ||||||
| 	// backend.canvas.Scale ( | 	backend.drawRune(1, 0, 'h') | ||||||
| 		// backend.metrics.windowWidth, | 	backend.drawRune(2, 0, 'e') | ||||||
| 		// backend.metrics.windowHeight) | 	backend.drawRune(4, 0, 'q') | ||||||
| 	backend.drawRune(8, 16, 'X') | 	backend.drawRune(5, 0, 'u') | ||||||
|  | 	backend.drawRune(6, 0, 'i') | ||||||
|  | 	backend.drawRune(7, 0, 'c') | ||||||
|  | 	backend.drawRune(8, 0, 'k') | ||||||
|  | 	 | ||||||
| 	backend.canvas.XSurfaceSet(backend.window.Id) | 	backend.canvas.XSurfaceSet(backend.window.Id) | ||||||
| 	backend.canvas.XDraw() | 	backend.canvas.XDraw() | ||||||
| 	backend.canvas.XPaint(backend.window.Id) | 	backend.canvas.XPaint(backend.window.Id) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (backend *Backend) drawRune (x, y int, character rune) { | func (backend *Backend) drawRune (x, y int, character rune) { | ||||||
| 	// bounds, image, point, _, _ := | 	_, mask, maskPoint, _, _ := backend.font.face.Glyph ( | ||||||
|  | 		fixed.Point26_6 { }, | ||||||
|  | 		character) | ||||||
|  | 	draw.DrawMask ( | ||||||
|  | 		backend.canvas, | ||||||
|  | 		backend.boundsOfCell(x, y), | ||||||
|  | 		fakeImage { | ||||||
|  | 			color: backend.config.Color(stone.ColorForeground), | ||||||
|  | 		}, | ||||||
|  | 		image.Point { }, | ||||||
|  | 		mask, | ||||||
|  | 		maskPoint, | ||||||
|  | 		draw.Over) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (backend *Backend) cellSubImage (x, y int) (cell *xgraphics.Image) { | ||||||
|  | 	cell = backend.canvas.SubImage(backend.boundsOfCell(x, y)).(*xgraphics.Image) | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (backend *Backend) originOfCell (x, y int) (origin image.Point) { | ||||||
|  | 	origin = image.Point { | ||||||
|  | 		X: x * backend.metrics.cellWidth  + backend.metrics.paddingX, | ||||||
|  | 		Y: y * backend.metrics.cellHeight + backend.metrics.paddingY, | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (backend *Backend) boundsOfCell (x, y int) (bounds image.Rectangle) { | ||||||
|  | 	bounds = image.Rectangle { | ||||||
|  | 		Min: backend.originOfCell(x, y), | ||||||
|  | 		Max: backend.originOfCell(x + 1, y + 1), | ||||||
|  | 	} | ||||||
|  | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // factory instantiates an X backend. | // factory instantiates an X backend. | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user