In: Computer Science
JAVA question here, and thank you. I need ot update the following classes an fixme's on this.canvas = null etc.
Thanks!
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import edu.luc.etl.cs313.android.shapes.model.*;
/**
* A Visitor for drawing a shape to an Android canvas.
*/
public class Draw implements Visitor<Void> {
// TODO entirely your job (except onCircle)
private final Canvas canvas;
private final Paint paint;
public Draw(final Canvas canvas, final Paint paint) {
this.canvas = null; // FIXME
this.paint = null; // FIXME
paint.setStyle(Style.STROKE);
}
@Override
public Void onCircle(final Circle c) {
canvas.drawCircle(0, 0, c.getRadius(), paint);
return null;
}
@Override
public Void onStrokeColor(final StrokeColor c) {
return null;
}
@Override
public Void onFill(final Fill f) {
return null;
}
@Override
public Void onGroup(final Group g) {
return null;
}
@Override
public Void onLocation(final Location l) {
return null;
}
@Override
public Void onRectangle(final Rectangle r) {
return null;
}
@Override
public Void onOutline(Outline o) {
return null;
}
@Override
public Void onPolygon(final Polygon s) {
final float[] pts = null;
canvas.drawLines(pts, paint);
return null;
}
}
// Source Code:
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import edu.luc.etl.cs313.android.shapes.model.*;
import java.util.Iterator;
import java.util.List;
/**
* A Visitor for drawing a shape to an Android canvas.
*/
public class Draw implements Visitor<Void> {
private final Canvas canvas;
private final Paint paint;
public Draw(final Canvas canvas, final Paint paint) {
this.canvas = canvas;
this.paint = paint;
paint.setStyle(Style.STROKE);
}
@Override
public Void onCircle(final Circle c) {
canvas.drawCircle(0, 0, c.getRadius(), paint);
return null;
}
@Override
public Void onStrokeColor(final StrokeColor c) {
final int x = paint.getColor();
paint.setColor(c.getColor());
c.getShape().accept(this);
paint.setColor(x);
return null;
}
@Override
public Void onFill(final Fill f) {
final Style a = paint.getStyle();
paint.setStyle(Style.FILL_AND_STROKE);
f.getShape().accept(this);
paint.setStyle(a);
return null;
}
@Override
public Void onGroup(final Group g) {
final Iterator<? extends Shape > shape = g.getShapes().iterator();
while (shape.hasNext()) {
shape.next().accept(this);
}
return null;
}
@Override
public Void onLocation(final Location l) {
canvas.translate(l.getX(), l.getY());
l.getShape().accept(this);
canvas.translate(-l.getX(), -l.getY());
return null;
}
@Override
public Void onRectangle(final Rectangle r) {
canvas.drawRect(0, 0, r.getWidth(), r.getHeight(), paint);
return null;
}
@Override
public Void onOutline(Outline o) {
final Style before = paint.getStyle();
paint.setStyle(Style.STROKE);
o.getShape().accept(this);
paint.setStyle(before);
return null;
}
@Override
public Void onPolygon(final Polygon s) {
List<? extends Point> points = s.getPoints();
final float[] pts =
{
points.get(0).getX(), points.get(0).getY(),
points.get(1).getX(), points.get(1).getY(),
points.get(1).getX(), points.get(1).getY(),
points.get(2).getX(), points.get(2).getY(),
points.get(2).getX(), points.get(2).getY(),
points.get(3).getX(), points.get(3).getY(),
points.get(0).getX(), points.get(0).getY(),
};
canvas.drawLines(pts, paint);
return null;
}
}