SandSurface.java :  » UnTagged » sandblaster » com » loganh » sandblaster » Android Open Source

Android Open Source » UnTagged » sandblaster 
sandblaster » com » loganh » sandblaster » SandSurface.java
package com.loganh.sandblaster;

import android.content.Context;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceView;


public class SandSurface extends SurfaceView {

  private AbsRenderer.Camera camera;
  private SandBoxDrawer drawer;
  private SandBoxPresenter presenter;

  public SandSurface(Context context, AttributeSet attrs) {
    super(context, attrs);
    drawer = new SandBoxDrawer();
  }

  public void setCamera(AbsRenderer.Camera camera) {
    this.camera = camera;
  }

  public void setSandBoxPresenter(SandBoxPresenter presenter) {
    this.presenter = presenter;
  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
    if (camera == null) {
      return false;
    }
    Pen pen = presenter.getPen();
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
      presenter.pauseDriver();
      presenter.getUndoStack().push(presenter.getSandBox());
      Point p = getTouchPoint(event);
      pen.press(drawer, p.x, p.y);
      presenter.draw();
      presenter.resumeDriver();
      return true;
    } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
      presenter.pauseDriver();
      Point p = getTouchPoint(event);
      pen.drag(drawer, p.x, p.y);
      presenter.draw();
      presenter.resumeDriver();
      return true;
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
      presenter.pauseDriver();
      Point p = getTouchPoint(event);
      pen.release(drawer, p.x, p.y);
      presenter.draw();
      presenter.resumeDriver();
      return true;
    }
    return false;
  }

  private Point getTouchPoint(MotionEvent event) {
    Point p = new Point(Math.round(event.getX()), Math.round(event.getY()));
    return camera.viewToObject(p);
  }

  private class SandBoxDrawer implements Pen.Target {
    public void drawAt(Element element, int x, int y) {
      if (presenter.getPen().getSelectedTool() == Pen.Tool.SPOUT) {
        if (element == null) {
          presenter.removeSource(x, y);
        } else {
          presenter.addSource(element, x, y);
        }
      } else {
        presenter.removeSource(x, y);
        presenter.getSandBox().setParticle(x, y, element);
      }
    }

    public void setLineOverlay(Pen pen, int x1, int y1, int x2, int y2) {
      Point p1 = camera.objectToView(new Point(x1, y1));
      Point p2 = camera.objectToView(new Point(x2, y2));
      presenter.setLineOverlay(pen, p1.x, p1.y, p2.x, p2.y);
    }

    public void clearLineOverlay() {
      presenter.clearLineOverlay();
    }
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.