samer@0: /* samer@0: * VectorEditor.java samer@0: * samer@0: * Copyright (c) 2001, Samer Abdallah, King's College London. samer@0: * All rights reserved. samer@0: * samer@0: * This software is provided AS iS and WITHOUT ANY WARRANTY; samer@0: * without even the implied warranty of MERCHANTABILITY or samer@0: * FITNESS FOR A PARTICULAR PURPOSE. samer@0: */ samer@0: samer@0: package samer.maths; samer@0: samer@0: import samer.core.*; samer@0: import java.awt.*; samer@0: import java.awt.event.*; samer@0: import java.util.*; samer@0: samer@0: public class VectorEditor extends VectorPlotter samer@0: implements MouseListener, MouseMotionListener samer@0: { samer@0: Mat mat; samer@0: double lasty; samer@0: int lasti; samer@0: samer@0: public VectorEditor(Observable o, Vec s) { samer@0: super(o,s); samer@0: addMouseListener(this); samer@0: addMouseMotionListener(this); samer@0: mat=s.mat(); samer@0: } samer@0: samer@0: private void handle(MouseEvent e,boolean dragging) samer@0: { samer@0: // get inverse mapping of position samer@0: double x = xmap.inverseFromInt(e.getX()); samer@0: double y = ymap.inverseFromInt(height-e.getY()); samer@0: int i = (int)x; samer@0: samer@0: if (i>=0 && ilasti) { samer@0: for (int j=lasti+1; j<=i; j++) { samer@0: double t=(j-lasti)/(float)(i-lasti); samer@0: double yy = t*y + (1-t)*lasty; samer@0: mat.set(1,j,yy); samer@0: } samer@0: } else if (i=i; j--) { samer@0: double t=(j-lasti)/(float)(i-lasti); samer@0: double yy = t*y + (1-t)*lasty; samer@0: mat.set(1,j,yy); samer@0: } samer@0: } else { samer@0: mat.set(1,i,y); samer@0: } samer@0: } else { samer@0: mat.set(1,i,y); samer@0: } samer@0: obs.notifyObservers(null); samer@0: lasty=y; samer@0: lasti=i; samer@0: } samer@0: } samer@0: samer@0: public void mouseMoved(MouseEvent e) {} samer@0: public void mouseDragged(MouseEvent e) { samer@0: int f = e.getModifiers(); samer@0: if ((f & InputEvent.BUTTON1_MASK)!=0) { samer@0: handle(e,true); e.consume(); samer@0: } samer@0: } samer@0: public void mousePressed(MouseEvent e) { samer@0: int f = e.getModifiers(); samer@0: if ((f & InputEvent.BUTTON1_MASK)!=0) { samer@0: handle(e,false); e.consume(); samer@0: } samer@0: } samer@0: public void mouseReleased(MouseEvent e) {} samer@0: public void mouseClicked(MouseEvent e) {} samer@0: public void mouseEntered(MouseEvent e) {} samer@0: public void mouseExited(MouseEvent e) {} samer@0: }