// Last edited on 2000-09-05 03:21:49 by stolfi // Um contexto grafico de alto nível import Retangulo; import Ponto; import java.awt.Color; public abstract class Gravura { // PARAMETROS PERSISTENTES public abstract void mudaLimites(Retangulo r); public abstract void restringeLimites(Retangulo r); // Define a área de recorte das operações // gráficas como sendo o retângulo "r". No caso de // "restringeLimites", o retângulo é antes recortado // com a área de recorte anterior. public abstract void mudaRaioDaPena(int raio); // Define o raio (em pixels, independentemente da escala) // da "pena" usada para traçar linhas e pontos. // Para linhas horizontais e verticais, a largura // do traço é na verdade "2*raio + 1". public abstract void mudaCorDoPincel(Color cor); public abstract void mudaCorDaPena(Color cor); // Define a cor para as operações gráficas subsequentes. // "mudaCorDoPincel" afeta as operações de preenchimento de figuras, // enquanto que "mudaCorDaPena" afeta o traçado de linhas. // Se a cor for "null", a parte correspondente (traçado // ou preenchimento) não é desenhada. public abstract void modoXOR(); public abstract void modoSET(); // Determina o modo de pintura e traçado de linhas. // O modo SET é o normal: a cor do pincel or pena // é atribuída ao pixel, apagando a cor anterior. // No modo XOR, o bit mais alto de cada componete da // cor do pixel é complementado; as cores da pena e do // pincel são ignoradas (exceto que "null" continua // significando "não desenhe"). // // Note que o modo XOR pode não funcionar como esperado // devido a pixels serem repintados mais de uma vez // pelo mesmo comando gráfico (especialmente quando // traçando linhas grossas). public abstract void translada(int dx, int dy); // Desloca a origem de modo que as coordenadas // (x,y) em comandos subseqüentes passam a // denotar o mesmo ponto que (x+dx,y+dy) // denota antes da chamada. public abstract double tamanhoDoPixel(); // Tamanho do pixel em unidades do cliente. public abstract double pixelsPorMilimetro(); // Resolução do dispositivo, em pixels por milimetro. // FIGURAS GEOMÉTRICAS ELEMENTARES // Os métodos abaixo desenham as figuras indicadas no dispositivo // subjacente a esta gravura. Todas as coordenadas são em unidades // do usuário, mas algumas dimensões (espessura de linhas, // diametro de pontos) são em milímetros. As figuras fechadas // (polígonos, círculos, retângulos) são pintadas primeiro // com o "pincel" corrente, e seu contorno é depois traçado // com a "pena" corrente. public abstract void ponto(Ponto p); // Um círculo preenchido na posição "p", com diâmetro igual à // largura da pena corrente, e na cor da mesma. public abstract void linha(Ponto p, Ponto q); // Um segmento de reta, engordado em todas as direções // por metade da largura da pena. As pontas são fechadas // por dois semicírculos. public abstract void poligono(Ponto[] p); // Um polígono, preenchido com a cor do pincel e depois // public abstract void retangulo(Retangulo r); // Um retângulo, preenchido ou não. }