You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
1.9 KiB

package main
import (
"fmt"
"tildegit.org/sloum/filtress/parser"
)
func (f *filter) update(change parser.Expression) {
var err error
opand := change.Opperand
if change.Variable != "" {
opand, err = retrieveVariableValue(change.Variable)
if err != nil {
panic(fmt.Sprintf("Runtime error: Unknown variable %q encountered", change.Variable))
}
}
switch change.Opperator {
case '+':
f.val += opand
case '-':
f.val -= opand
case '*':
f.val *= opand
case '/':
if opand == 0 {
f.val = 1
} else {
f.val /= opand
}
case '%':
if opand == 0 {
f.val = 1
} else {
f.val %= opand
}
case '=':
f.val = opand
}
if f.val > f.max {
f.val %= f.max
}
if f.val < f.min {
f.val = f.max - f.val%f.max
}
}
func (p *point) update(change []parser.Expression) {
var err error
var totalX, totalY, val, opand, max int
var target *int
for i, e := range change {
if i == 0 {
target = &totalX
val = p.x
max = p.maxX
} else if i == 1 {
target = &totalY
val = p.y
max = p.maxY
} else {
break
}
opand = e.Opperand
if e.Variable != "" {
opand, err = retrieveVariableValue(e.Variable)
if err != nil {
panic(fmt.Sprintf("Runtime error: Unknown variable %q encountered", e.Variable))
}
}
switch e.Opperator {
case '+':
*target = val + opand
case '-':
*target = val - opand
case '*':
*target = val * opand
case '/':
if opand == 0 {
*target = 1
} else {
*target = val / opand
}
case '%':
if opand == 0 {
*target = 1
} else {
*target = val % opand
}
case '=':
*target = opand
}
if *target > max {
*target %= max
}
if *target < 0 {
*target = max - (*target * -1 % max)
}
}
p.x = totalX
p.y = totalY
}
func (f *filterState) getColors() {
imCol := im.RGBAAt(fil.location.x, fil.location.y)
f.red.val = int(imCol.R)
f.blue.val = int(imCol.B)
f.green.val = int(imCol.B)
f.alpha.val = int(imCol.A)
}