summaryrefslogtreecommitdiff
path: root/prev/yz_repaint_test.go
blob: 8ea3cdec1b7fbe2b66fee35c044a1f7fd90b54e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// 21 august 2014

package ui

import (
	"image"
	"image/color"
	"image/draw"
	"strconv"
)

type repainter struct {
	img     *image.RGBA
	area    Area
	x       TextField
	y       TextField
	width   TextField
	height  TextField
	repaint Button
	all     Button
	grid    Grid

	xv int
	yv int
	wv int
	hv int
}

func newRepainter(times int) *repainter {
	r := new(repainter)
	r.img = tileImage(times)
	r.area = NewArea(r.img.Rect.Dx(), r.img.Rect.Dy(), r)
	r.area.OnTextFieldDismissed(r.tfdone)
	r.x = NewTextField()
	r.x.OnChanged(r.setx)
	r.y = NewTextField()
	r.y.OnChanged(r.sety)
	r.width = NewTextField()
	r.width.OnChanged(r.setwidth)
	r.height = NewTextField()
	r.height.OnChanged(r.setheight)
	r.repaint = NewButton("Rect")
	r.repaint.OnClicked(r.dorect)
	r.all = NewButton("All")
	r.all.OnClicked(r.doall)
	grid := NewGrid()
	grid.Add(r.area, nil, South, true, Fill, true, Fill, 3, 6)
	grid.Add(r.x, nil, East, true, Fill, false, LeftTop, 1, 1)
	grid.Add(r.y, nil, South, true, Fill, false, LeftTop, 1, 1)
	grid.Add(r.width, nil, South, true, Fill, false, LeftTop, 1, 1)
	grid.Add(r.height, nil, South, true, Fill, false, LeftTop, 1, 1)
	grid.Add(r.repaint, nil, South, true, Fill, true, Fill, 1, 1)
	grid.Add(r.all, nil, South, true, Center, false, LeftTop, 1, 1)
	r.grid = grid
	r.grid.SetPadded(*spaced)
	return r
}

func (r *repainter) Paint(rect image.Rectangle) *image.RGBA {
	return r.img.SubImage(rect).(*image.RGBA)
}

func (r *repainter) Mouse(me MouseEvent) {
	if me.Up == 1 {
		r.area.OpenTextFieldAt(me.Pos.X, me.Pos.Y)
	}
}

func (r *repainter) tfdone() {
	println(r.area.TextFieldText())
}

func (r *repainter) Key(ke KeyEvent) bool { return false }

func (r *repainter) setx() {
	i, err := strconv.Atoi(r.x.Text())
	if err != nil {
		r.x.Invalid(err.Error())
		return
	}
	r.x.Invalid("")
	r.xv = i
}

func (r *repainter) sety() {
	i, err := strconv.Atoi(r.y.Text())
	if err != nil {
		r.y.Invalid(err.Error())
		return
	}
	r.y.Invalid("")
	r.yv = i
}

func (r *repainter) setwidth() {
	i, err := strconv.Atoi(r.width.Text())
	if err != nil {
		r.width.Invalid(err.Error())
		return
	}
	r.width.Invalid("")
	r.wv = i
}

func (r *repainter) setheight() {
	i, err := strconv.Atoi(r.height.Text())
	if err != nil {
		r.height.Invalid(err.Error())
		return
	}
	r.height.Invalid("")
	r.hv = i
}

func (r *repainter) alter(rect image.Rectangle, c color.Color) {
	draw.Draw(r.img, rect, &image.Uniform{c}, image.ZP, draw.Over)
}

func (r *repainter) dorect() {
	rect := image.Rect(r.xv, r.yv, r.xv+r.wv, r.yv+r.hv)
	r.alter(rect, color.RGBA{255, 0, 255, 128})
	r.area.Repaint(rect)
}

func (r *repainter) doall() {
	r.alter(r.img.Rect, color.RGBA{255, 255, 0, 128})
	r.area.RepaintAll()
}