ecs #15
| @ -4,11 +4,11 @@ import "fmt" | |||||||
| import "time" | import "time" | ||||||
| import "image" | import "image" | ||||||
| import "image/color" | import "image/color" | ||||||
|  | import "git.tebibyte.media/sashakoshka/tomo" | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/canvas" | import "git.tebibyte.media/sashakoshka/tomo/canvas" | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/artist" | import "git.tebibyte.media/sashakoshka/tomo/artist" | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/shatter" | import "git.tebibyte.media/sashakoshka/tomo/shatter" | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/textdraw" | import "git.tebibyte.media/sashakoshka/tomo/textdraw" | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/elements/core" |  | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/artist/shapes" | import "git.tebibyte.media/sashakoshka/tomo/artist/shapes" | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/artist/patterns" | import "git.tebibyte.media/sashakoshka/tomo/artist/patterns" | ||||||
| import defaultfont "git.tebibyte.media/sashakoshka/tomo/default/font" | import defaultfont "git.tebibyte.media/sashakoshka/tomo/default/font" | ||||||
| @ -16,49 +16,50 @@ import defaultfont "git.tebibyte.media/sashakoshka/tomo/default/font" | |||||||
| // Artist is an element that displays shapes and patterns drawn by the artist | // Artist is an element that displays shapes and patterns drawn by the artist | ||||||
| // package in order to test it. | // package in order to test it. | ||||||
| type Artist struct { | type Artist struct { | ||||||
| 	*core.Core | 	entity tomo.Entity | ||||||
| 	core core.CoreControl |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // NewArtist creates a new artist test element. | // NewArtist creates a new artist test element. | ||||||
| func NewArtist () (element *Artist) { | func NewArtist () *Artist { | ||||||
| 	element = &Artist { } | 	return &Artist { } | ||||||
| 	element.Core, element.core = core.NewCore(element, element.draw) |  | ||||||
| 	element.core.SetMinimumSize(240, 240) |  | ||||||
| 	return |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (element *Artist) draw () { | func (element *Artist) Bind (entity tomo.Entity) { | ||||||
| 	bounds := element.Bounds() | 	element.entity = entity | ||||||
| 	patterns.Uhex(0x000000FF).Draw(element.core, bounds) | 	entity.SetMinimumSize(240, 240) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (element *Artist) Draw (destination canvas.Canvas) { | ||||||
|  | 	bounds := element.entity.Bounds() | ||||||
|  | 	patterns.Uhex(0x000000FF).Draw(destination, bounds) | ||||||
| 
 | 
 | ||||||
| 	drawStart := time.Now() | 	drawStart := time.Now() | ||||||
| 
 | 
 | ||||||
| 	// 0, 0 - 3, 0 | 	// 0, 0 - 3, 0 | ||||||
| 	for x := 0; x < 4; x ++ { | 	for x := 0; x < 4; x ++ { | ||||||
| 		element.colorLines(x + 1, element.cellAt(x, 0).Bounds()) | 		element.colorLines(destination, x + 1, element.cellAt(destination, x, 0).Bounds()) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// 4, 0 | 	// 4, 0 | ||||||
| 	c40 := element.cellAt(4, 0) | 	c40 := element.cellAt(destination, 4, 0) | ||||||
| 	shapes.StrokeColorRectangle(c40, artist.Hex(0x888888FF), c40.Bounds(), 1) | 	shapes.StrokeColorRectangle(c40, artist.Hex(0x888888FF), c40.Bounds(), 1) | ||||||
| 	shapes.ColorLine ( | 	shapes.ColorLine ( | ||||||
| 		c40, artist.Hex(0xFF0000FF), 1, | 		c40, artist.Hex(0xFF0000FF), 1, | ||||||
| 		c40.Bounds().Min, c40.Bounds().Max) | 		c40.Bounds().Min, c40.Bounds().Max) | ||||||
| 
 | 
 | ||||||
| 	// 0, 1 | 	// 0, 1 | ||||||
| 	c01 := element.cellAt(0, 1) | 	c01 := element.cellAt(destination, 0, 1) | ||||||
| 	shapes.StrokeColorRectangle(c01, artist.Hex(0x888888FF), c01.Bounds(), 1) | 	shapes.StrokeColorRectangle(c01, artist.Hex(0x888888FF), c01.Bounds(), 1) | ||||||
| 	shapes.FillColorEllipse(element.core, artist.Hex(0x00FF00FF), c01.Bounds()) | 	shapes.FillColorEllipse(destination, artist.Hex(0x00FF00FF), c01.Bounds()) | ||||||
| 
 | 
 | ||||||
| 	// 1, 1 - 3, 1 | 	// 1, 1 - 3, 1 | ||||||
| 	for x := 1; x < 4; x ++ { | 	for x := 1; x < 4; x ++ { | ||||||
| 		c := element.cellAt(x, 1) | 		c := element.cellAt(destination, x, 1) | ||||||
| 		shapes.StrokeColorRectangle ( | 		shapes.StrokeColorRectangle ( | ||||||
| 			element.core, artist.Hex(0x888888FF), | 			destination, artist.Hex(0x888888FF), | ||||||
| 			c.Bounds(), 1) | 			c.Bounds(), 1) | ||||||
| 		shapes.StrokeColorEllipse ( | 		shapes.StrokeColorEllipse ( | ||||||
| 			element.core, | 			destination, | ||||||
| 			[]color.RGBA { | 			[]color.RGBA { | ||||||
| 				artist.Hex(0xFF0000FF), | 				artist.Hex(0xFF0000FF), | ||||||
| 				artist.Hex(0x00FF00FF), | 				artist.Hex(0x00FF00FF), | ||||||
| @ -68,7 +69,7 @@ func (element *Artist) draw () { | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// 4, 1 | 	// 4, 1 | ||||||
| 	c41 := element.cellAt(4, 1) | 	c41 := element.cellAt(destination, 4, 1) | ||||||
| 	shatterPos := c41.Bounds().Min | 	shatterPos := c41.Bounds().Min | ||||||
| 	rocks := []image.Rectangle { | 	rocks := []image.Rectangle { | ||||||
| 		image.Rect(3, 12, 13, 23).Add(shatterPos), | 		image.Rect(3, 12, 13, 23).Add(shatterPos), | ||||||
| @ -85,46 +86,46 @@ func (element *Artist) draw () { | |||||||
| 			patterns.Uhex(0xFF00FFFF), | 			patterns.Uhex(0xFF00FFFF), | ||||||
| 			patterns.Uhex(0xFFFF00FF), | 			patterns.Uhex(0xFFFF00FF), | ||||||
| 			patterns.Uhex(0x00FFFFFF), | 			patterns.Uhex(0x00FFFFFF), | ||||||
| 		} [index % 5].Draw(element.core, tile) | 		} [index % 5].Draw(destination, tile) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// 0, 2 | 	// 0, 2 | ||||||
| 	c02 := element.cellAt(0, 2) | 	c02 := element.cellAt(destination, 0, 2) | ||||||
| 	shapes.StrokeColorRectangle(c02, artist.Hex(0x888888FF), c02.Bounds(), 1) | 	shapes.StrokeColorRectangle(c02, artist.Hex(0x888888FF), c02.Bounds(), 1) | ||||||
| 	shapes.FillEllipse(c02, c41, c02.Bounds()) | 	shapes.FillEllipse(c02, c41, c02.Bounds()) | ||||||
| 
 | 
 | ||||||
| 	// 1, 2 | 	// 1, 2 | ||||||
| 	c12 := element.cellAt(1, 2) | 	c12 := element.cellAt(destination, 1, 2) | ||||||
| 	shapes.StrokeColorRectangle(c12, artist.Hex(0x888888FF), c12.Bounds(), 1) | 	shapes.StrokeColorRectangle(c12, artist.Hex(0x888888FF), c12.Bounds(), 1) | ||||||
| 	shapes.StrokeEllipse(c12, c41, c12.Bounds(), 5) | 	shapes.StrokeEllipse(c12, c41, c12.Bounds(), 5) | ||||||
| 	 | 	 | ||||||
| 	// 2, 2 | 	// 2, 2 | ||||||
| 	c22 := element.cellAt(2, 2) | 	c22 := element.cellAt(destination, 2, 2) | ||||||
| 	shapes.FillRectangle(c22, c41, c22.Bounds()) | 	shapes.FillRectangle(c22, c41, c22.Bounds()) | ||||||
| 
 | 
 | ||||||
| 	// 3, 2 | 	// 3, 2 | ||||||
| 	c32 := element.cellAt(3, 2) | 	c32 := element.cellAt(destination, 3, 2) | ||||||
| 	shapes.StrokeRectangle(c32, c41, c32.Bounds(), 5) | 	shapes.StrokeRectangle(c32, c41, c32.Bounds(), 5) | ||||||
| 	 | 	 | ||||||
| 	// 4, 2 | 	// 4, 2 | ||||||
| 	c42 := element.cellAt(4, 2) | 	c42 := element.cellAt(destination, 4, 2) | ||||||
| 	 | 	 | ||||||
| 	// 0, 3 | 	// 0, 3 | ||||||
| 	c03 := element.cellAt(0, 3) | 	c03 := element.cellAt(destination, 0, 3) | ||||||
| 	patterns.Border { | 	patterns.Border { | ||||||
| 		Canvas: element.thingy(c42), | 		Canvas: element.thingy(c42), | ||||||
| 		Inset:  artist.Inset { 8, 8, 8, 8 }, | 		Inset:  artist.Inset { 8, 8, 8, 8 }, | ||||||
| 	}.Draw(c03, c03.Bounds()) | 	}.Draw(c03, c03.Bounds()) | ||||||
| 	 | 	 | ||||||
| 	// 1, 3 | 	// 1, 3 | ||||||
| 	c13 := element.cellAt(1, 3) | 	c13 := element.cellAt(destination, 1, 3) | ||||||
| 	patterns.Border { | 	patterns.Border { | ||||||
| 		Canvas: element.thingy(c42), | 		Canvas: element.thingy(c42), | ||||||
| 		Inset:  artist.Inset { 8, 8, 8, 8 }, | 		Inset:  artist.Inset { 8, 8, 8, 8 }, | ||||||
| 	}.Draw(c13, c13.Bounds().Inset(10)) | 	}.Draw(c13, c13.Bounds().Inset(10)) | ||||||
| 	 | 	 | ||||||
| 	// 2, 3 | 	// 2, 3 | ||||||
| 	c23 := element.cellAt(2, 3) | 	c23 := element.cellAt(destination, 2, 3) | ||||||
| 	patterns.Border { | 	patterns.Border { | ||||||
| 		Canvas: element.thingy(c42), | 		Canvas: element.thingy(c42), | ||||||
| 		Inset:  artist.Inset { 8, 8, 8, 8 }, | 		Inset:  artist.Inset { 8, 8, 8, 8 }, | ||||||
| @ -143,51 +144,51 @@ func (element *Artist) draw () { | |||||||
| 		drawTime.Milliseconds(), | 		drawTime.Milliseconds(), | ||||||
| 		drawTime.Microseconds()))) | 		drawTime.Microseconds()))) | ||||||
| 	textDrawer.Draw ( | 	textDrawer.Draw ( | ||||||
| 		element.core, artist.Hex(0xFFFFFFFF), | 		destination, artist.Hex(0xFFFFFFFF), | ||||||
| 		image.Pt(bounds.Min.X + 8, bounds.Max.Y - 24)) | 		image.Pt(bounds.Min.X + 8, bounds.Max.Y - 24)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (element *Artist) colorLines (weight int, bounds image.Rectangle) { | func (element *Artist) colorLines (destination canvas.Canvas, weight int, bounds image.Rectangle) { | ||||||
| 	bounds = bounds.Inset(4) | 	bounds = bounds.Inset(4) | ||||||
| 	c := artist.Hex(0xFFFFFFFF) | 	c := artist.Hex(0xFFFFFFFF) | ||||||
| 	shapes.ColorLine(element.core, c, weight, bounds.Min, bounds.Max) | 	shapes.ColorLine(destination, c, weight, bounds.Min, bounds.Max) | ||||||
| 	shapes.ColorLine ( | 	shapes.ColorLine ( | ||||||
| 		element.core, c, weight, | 		destination, c, weight, | ||||||
| 		image.Pt(bounds.Max.X, bounds.Min.Y), | 		image.Pt(bounds.Max.X, bounds.Min.Y), | ||||||
| 		image.Pt(bounds.Min.X, bounds.Max.Y)) | 		image.Pt(bounds.Min.X, bounds.Max.Y)) | ||||||
| 	shapes.ColorLine ( | 	shapes.ColorLine ( | ||||||
| 		element.core, c, weight, | 		destination, c, weight, | ||||||
| 		image.Pt(bounds.Max.X, bounds.Min.Y + 16), | 		image.Pt(bounds.Max.X, bounds.Min.Y + 16), | ||||||
| 		image.Pt(bounds.Min.X, bounds.Max.Y - 16)) | 		image.Pt(bounds.Min.X, bounds.Max.Y - 16)) | ||||||
| 	shapes.ColorLine ( | 	shapes.ColorLine ( | ||||||
| 		element.core, c, weight, | 		destination, c, weight, | ||||||
| 		image.Pt(bounds.Min.X, bounds.Min.Y + 16), | 		image.Pt(bounds.Min.X, bounds.Min.Y + 16), | ||||||
| 		image.Pt(bounds.Max.X, bounds.Max.Y - 16)) | 		image.Pt(bounds.Max.X, bounds.Max.Y - 16)) | ||||||
| 	shapes.ColorLine ( | 	shapes.ColorLine ( | ||||||
| 		element.core, c, weight, | 		destination, c, weight, | ||||||
| 		image.Pt(bounds.Min.X + 20, bounds.Min.Y), | 		image.Pt(bounds.Min.X + 20, bounds.Min.Y), | ||||||
| 		image.Pt(bounds.Max.X - 20, bounds.Max.Y)) | 		image.Pt(bounds.Max.X - 20, bounds.Max.Y)) | ||||||
| 	shapes.ColorLine ( | 	shapes.ColorLine ( | ||||||
| 		element.core, c, weight, | 		destination, c, weight, | ||||||
| 		image.Pt(bounds.Max.X - 20, bounds.Min.Y), | 		image.Pt(bounds.Max.X - 20, bounds.Min.Y), | ||||||
| 		image.Pt(bounds.Min.X + 20, bounds.Max.Y)) | 		image.Pt(bounds.Min.X + 20, bounds.Max.Y)) | ||||||
| 	shapes.ColorLine ( | 	shapes.ColorLine ( | ||||||
| 		element.core, c, weight, | 		destination, c, weight, | ||||||
| 		image.Pt(bounds.Min.X, bounds.Min.Y + bounds.Dy() / 2), | 		image.Pt(bounds.Min.X, bounds.Min.Y + bounds.Dy() / 2), | ||||||
| 		image.Pt(bounds.Max.X, bounds.Min.Y + bounds.Dy() / 2)) | 		image.Pt(bounds.Max.X, bounds.Min.Y + bounds.Dy() / 2)) | ||||||
| 	shapes.ColorLine ( | 	shapes.ColorLine ( | ||||||
| 		element.core, c, weight, | 		destination, c, weight, | ||||||
| 		image.Pt(bounds.Min.X + bounds.Dx() / 2, bounds.Min.Y), | 		image.Pt(bounds.Min.X + bounds.Dx() / 2, bounds.Min.Y), | ||||||
| 		image.Pt(bounds.Min.X + bounds.Dx() / 2, bounds.Max.Y)) | 		image.Pt(bounds.Min.X + bounds.Dx() / 2, bounds.Max.Y)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (element *Artist) cellAt (x, y int) (canvas.Canvas) { | func (element *Artist) cellAt (destination canvas.Canvas, x, y int) (canvas.Canvas) { | ||||||
| 	bounds := element.Bounds() | 	bounds := element.entity.Bounds() | ||||||
| 	cellBounds := image.Rectangle { } | 	cellBounds := image.Rectangle { } | ||||||
| 	cellBounds.Min = bounds.Min | 	cellBounds.Min = bounds.Min | ||||||
| 	cellBounds.Max.X = bounds.Min.X + bounds.Dx() / 5 | 	cellBounds.Max.X = bounds.Min.X + bounds.Dx() / 5 | ||||||
| 	cellBounds.Max.Y = bounds.Min.Y + (bounds.Dy() - 48) / 4 | 	cellBounds.Max.Y = bounds.Min.Y + (bounds.Dy() - 48) / 4 | ||||||
| 	return canvas.Cut (element.core, cellBounds.Add (image.Pt ( | 	return canvas.Cut (destination, cellBounds.Add (image.Pt ( | ||||||
| 		x * cellBounds.Dx(), | 		x * cellBounds.Dx(), | ||||||
| 		y * cellBounds.Dy()))) | 		y * cellBounds.Dy()))) | ||||||
| } | } | ||||||
|  | |||||||
| @ -4,17 +4,16 @@ import "image" | |||||||
| import "git.tebibyte.media/sashakoshka/tomo" | import "git.tebibyte.media/sashakoshka/tomo" | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/input" | import "git.tebibyte.media/sashakoshka/tomo/input" | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/artist" | import "git.tebibyte.media/sashakoshka/tomo/artist" | ||||||
|  | import "git.tebibyte.media/sashakoshka/tomo/canvas" | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/artist/shapes" | import "git.tebibyte.media/sashakoshka/tomo/artist/shapes" | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/elements/core" |  | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/default/theme" | import "git.tebibyte.media/sashakoshka/tomo/default/theme" | ||||||
| import "git.tebibyte.media/sashakoshka/tomo/default/config" | import "git.tebibyte.media/sashakoshka/tomo/default/config" | ||||||
| 
 | 
 | ||||||
| // Mouse is an element capable of testing mouse input. When the mouse is clicked | // Mouse is an element capable of testing mouse input. When the mouse is clicked | ||||||
| // and dragged on it, it draws a trail. | // and dragged on it, it draws a trail. | ||||||
| type Mouse struct { | type Mouse struct { | ||||||
| 	*core.Core | 	entity       tomo.Entity | ||||||
| 	core core.CoreControl | 	pressed      bool | ||||||
| 	drawing      bool |  | ||||||
| 	lastMousePos image.Point | 	lastMousePos image.Point | ||||||
| 	 | 	 | ||||||
| 	config config.Wrapped | 	config config.Wrapped | ||||||
| @ -24,69 +23,62 @@ type Mouse struct { | |||||||
| // NewMouse creates a new mouse test element. | // NewMouse creates a new mouse test element. | ||||||
| func NewMouse () (element *Mouse) { | func NewMouse () (element *Mouse) { | ||||||
| 	element = &Mouse { } | 	element = &Mouse { } | ||||||
| 	element.theme.Case = tomo.C("tomo", "piano") | 	element.theme.Case = tomo.C("tomo", "mouse") | ||||||
| 	element.Core, element.core = core.NewCore(element, element.draw) |  | ||||||
| 	element.core.SetMinimumSize(32, 32) |  | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (element *Mouse) Bind (entity tomo.Entity) { | ||||||
|  | 	element.entity = entity | ||||||
|  | 	entity.SetMinimumSize(32, 32) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (element *Mouse) Draw (destination canvas.Canvas) { | ||||||
|  | 	bounds := element.entity.Bounds() | ||||||
|  | 	accent := element.theme.Color ( | ||||||
|  | 		tomo.ColorAccent, | ||||||
|  | 		tomo.State { }) | ||||||
|  | 	shapes.FillColorRectangle(destination, accent, bounds) | ||||||
|  | 	shapes.StrokeColorRectangle ( | ||||||
|  | 		destination, | ||||||
|  | 		artist.Hex(0x000000FF), | ||||||
|  | 		bounds, 1) | ||||||
|  | 	shapes.ColorLine ( | ||||||
|  | 		destination, artist.Hex(0xFFFFFFFF), 1, | ||||||
|  | 		bounds.Min.Add(image.Pt(1, 1)), | ||||||
|  | 		bounds.Min.Add(image.Pt(bounds.Dx() - 2, bounds.Dy() - 2))) | ||||||
|  | 	shapes.ColorLine ( | ||||||
|  | 		destination, artist.Hex(0xFFFFFFFF), 1, | ||||||
|  | 		bounds.Min.Add(image.Pt(1, bounds.Dy() - 2)), | ||||||
|  | 		bounds.Min.Add(image.Pt(bounds.Dx() - 2, 1))) | ||||||
|  | 	if element.pressed { | ||||||
|  | 		shapes.ColorLine ( | ||||||
|  | 			destination, artist.Hex(0x000000FF), 1, | ||||||
|  | 			bounds.Min, element.lastMousePos) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // SetTheme sets the element's theme. | // SetTheme sets the element's theme. | ||||||
| func (element *Mouse) SetTheme (new tomo.Theme) { | func (element *Mouse) SetTheme (new tomo.Theme) { | ||||||
| 	element.theme.Theme = new | 	element.theme.Theme = new | ||||||
| 	element.redo() | 	element.entity.Invalidate() | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // SetConfig sets the element's configuration. | // SetConfig sets the element's configuration. | ||||||
| func (element *Mouse) SetConfig (new tomo.Config) { | func (element *Mouse) SetConfig (new tomo.Config) { | ||||||
| 	element.config.Config = new | 	element.config.Config = new | ||||||
| 	element.redo() | 	element.entity.Invalidate() | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (element *Mouse) redo () { |  | ||||||
| 	if !element.core.HasImage() { return } |  | ||||||
| 	element.draw() |  | ||||||
| 	element.core.DamageAll() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func (element *Mouse) draw () { |  | ||||||
| 	bounds := element.Bounds() |  | ||||||
| 	accent := element.theme.Color ( |  | ||||||
| 		tomo.ColorAccent, |  | ||||||
| 		tomo.State { }) |  | ||||||
| 	shapes.FillColorRectangle(element.core, accent, bounds) |  | ||||||
| 	shapes.StrokeColorRectangle ( |  | ||||||
| 		element.core, |  | ||||||
| 		artist.Hex(0x000000FF), |  | ||||||
| 		bounds, 1) |  | ||||||
| 	shapes.ColorLine ( |  | ||||||
| 		element.core, artist.Hex(0xFFFFFFFF), 1, |  | ||||||
| 		bounds.Min.Add(image.Pt(1, 1)), |  | ||||||
| 		bounds.Min.Add(image.Pt(bounds.Dx() - 2, bounds.Dy() - 2))) |  | ||||||
| 	shapes.ColorLine ( |  | ||||||
| 		element.core, artist.Hex(0xFFFFFFFF), 1, |  | ||||||
| 		bounds.Min.Add(image.Pt(1, bounds.Dy() - 2)), |  | ||||||
| 		bounds.Min.Add(image.Pt(bounds.Dx() - 2, 1))) |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (element *Mouse) HandleMouseDown (x, y int, button input.Button) { | func (element *Mouse) HandleMouseDown (x, y int, button input.Button) { | ||||||
| 	element.drawing = true | 	element.pressed = true | ||||||
| 	element.lastMousePos = image.Pt(x, y) |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (element *Mouse) HandleMouseUp (x, y int, button input.Button) { | func (element *Mouse) HandleMouseUp (x, y int, button input.Button) { | ||||||
| 	element.drawing = false | 	element.pressed = false | ||||||
| 	mousePos := image.Pt(x, y) |  | ||||||
| 	element.core.DamageRegion (shapes.ColorLine ( |  | ||||||
| 		element.core, artist.Hex(0x000000FF), 1, |  | ||||||
| 		element.lastMousePos, mousePos)) |  | ||||||
| 	element.lastMousePos = mousePos |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (element *Mouse) HandleMotion (x, y int) { | func (element *Mouse) HandleMotion (x, y int) { | ||||||
| 	if !element.drawing { return } | 	if !element.pressed { return } | ||||||
| 	mousePos := image.Pt(x, y) | 	element.lastMousePos = image.Pt(x, y) | ||||||
| 	element.core.DamageRegion (shapes.ColorLine ( | 	element.entity.Invalidate() | ||||||
| 		element.core, artist.Hex(0x000000FF), 1, |  | ||||||
| 		element.lastMousePos, mousePos)) |  | ||||||
| 	element.lastMousePos = mousePos |  | ||||||
| } | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user