-
Notifications
You must be signed in to change notification settings - Fork 0
/
Capas.pde
119 lines (102 loc) · 2.66 KB
/
Capas.pde
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
void crearCapas() {
capas = new ArrayList<CapaDibujo>();
for (int i = 0; i < 9; i++) {
capas.add(new CapaDibujo(i + 1));
}
}
void pintarCapas() {
for (int i = capas.size() - 1; i >= 0; i--) {
CapaDibujo capa = capas.get(i);
capa.pintar();
if (i == estado.capaSeleccionada && estado.registrandoTrazo) {
estado.nuevoTrazo.dibujate(capa.opacidad.valor);
}
}
}
class LienzoFondo {
Tinta tintaActual;
Tinta tintaPrevia;
int tiempoCambio;
boolean cambiando;
int duracionCambio;
LienzoFondo() {
tintaActual = tintasFondo.get(0);
}
void pintar() {
color colorFondo;
if (cambiando) {
int t = millis();
if (t - tiempoCambio < duracionCambio) {
float f = float(t - tiempoCambio) / duracionCambio;
colorFondo = tintaPrevia.interpolarHacia(tintaActual, f);
} else {
colorFondo = tintaActual.generarColor();
}
} else {
colorFondo = tintaActual.generarColor();
}
background(colorFondo);
}
void cambiarColor(Tinta tinta) {
tintaPrevia = tintaActual;
tintaActual = tinta;
tiempoCambio = millis();
cambiando = true;
duracionCambio = (int)estado.tiempoTransicionFondo.valor;
}
}
class CapaDibujo {
int indice;
ArrayList<Trazo> trazos;
NumeroInterpolado opacidad;
CapaDibujo(int indice) {
this.indice = indice;
trazos = new ArrayList<Trazo>();
opacidad = new NumeroInterpolado(1);
}
void pintar() {
opacidad.actualizar();
if (!visible()) return;
ArrayList<Trazo> paraRemover = new ArrayList<Trazo>();
for (Trazo trazo: trazos) {
trazo.dibujate(opacidad.valor);
if (trazo.removido) paraRemover.add(trazo);
}
trazos.removeAll(paraRemover);
}
void mostrar() {
opacidad.establecerObjetivo(1);
}
void ocultar() {
opacidad.establecerObjetivo(0);
}
void incrementarOpacidad(float d) {
opacidad.establecerObjetivo(constrain(opacidad.objetivo + d, 0, 1));
}
void disminuirOpacidad(float d) {
opacidad.establecerObjetivo(constrain(opacidad.objetivo - d, 0, 1));
}
void establecerOpacidad(float v) {
opacidad.establecerObjetivo(constrain(v, 0, 1));
}
void borrarTrazos() {
for (Trazo trazo: trazos) {
trazo.remover();
}
}
void borrarUltimoTrazo() {
for (int i = trazos.size() - 1; i >= 0; i--) {
Trazo tr = trazos.get(i);
if (!tr.removiendo) {
tr.remover();
break;
}
}
}
boolean visible() {
return 0.01 <= opacidad.valor;
}
boolean oculta() {
return opacidad.objetivo < 0.01 && (opacidad.interpolando || opacidad.valor < 0.01);
}
}