//(c): Matti Katila package org.fenfire.modules.pp; import org.fenfire.view.*; import org.fenfire.view.buoy.*; import org.fenfire.util.*; import org.nongnu.libvob.*; import org.nongnu.libvob.gl.*; import org.nongnu.libvob.impl.*; import org.nongnu.libvob.buoy.*; import com.hp.hpl.mesa.rdf.jena.model.*; import com.hp.hpl.mesa.rdf.jena.common.*; import java.awt.event.*; // implement fisheye in here later.. /** XXX */ public class PPCanvasCursor implements BuoyViewMainNode { private static final String rcsid = "$Id: PPCanvasCursor.java,v 1.1 2003/03/26 09:12:24 mudyc Exp $"; public static boolean dbg = false; private static void pa(String s) { System.out.println("PPCanvasCursor:"+s); } // Geometry /** The width of the main view. */ public float mainWidth = 600; /** The width of the left edge panel. */ public float leftPanelWidth = 100; /** The height of the entries in the left edge panel. */ public float leftPanelObjectHeight = 100; /** The "over-size" of the entries in the left panel */ public float leftPanelRealHeight = 170, leftPanelRealWidth = 230; /** The zoom in the left panel */ public float leftPanelZoom = .8f; /** The height of the main view. */ public float mainHeight = 600; /** The Y position of the main view. */ public float mainY = 100; /** Buoy floater settings. */ public float buoyCenterY = 400, buoyRadius = 400; /** Buoy viewport geometry. */ public float buoyVPWidth = 400, buoyVPHeight = 400; /** Link buoy viewport geometry. */ public float linkbuoyVPWidth = 200, linkbuoyVPHeight = 100; /** The zoom to be used for the buoys. */ public float buoyZoom = 1; /** The zoom to be used for the link creation buoys. */ public float linkbuoyZoom = .5f; // Current state /** The current zoom. * Pixels for 1 paper coordinate unit. */ public float zoom = 1; /** The current virtual-paper coordinates. */ public float panx=0, pany=0; /** Whether showing normal or link-making buoys. */ public boolean showLinkbuoys = false; private Object content; private NodePlacementHook hook; private GraphicsAPI.Window window; public PPCanvasCursor(Object content, NodePlacementHook hook, GraphicsAPI.Window w) { this.content = content; this.hook = hook; this.window = w; /* SimpleVStreamTexter sct = (SimpleVStreamTexter)space.getNodeTexter(); Enfilade1DImpl enf = (Enfilade1DImpl)sct.getEnfilade(c, null); java.util.List enfList= enf.getList(); Span1D span = (Span1D) enfList.get(0); NodeView cv; if (span instanceof TextSpan) cv = new TextNodeContentView(); else cv = new PageSpanNodeView(); float [] bs = new float[3]; cv.getSize(c, ((ViewContext)new AbstractViewContext()), bs); panx = bs[0]/2; pany = bs[1]/2; */ } /** Cause the changes to the zooming and panning variables * to be shown in the given vobscene. * This changes the parameters of the coordinate systems created by render(). */ private void setZoomPan(VobScene vs, int mainFrame) { DefaultVobMatcher m = (DefaultVobMatcher)vs.matcher; int cs = m.getCS(mainFrame, "C2F"); int csinv = m.getCS(mainFrame, "C2FINV"); vs.coords.setOrthoParams(cs, 0, -panx*zoom, -pany*zoom, zoom, zoom); vs.coords.setOrthoParams(csinv, 0, panx, pany, 1/zoom, 1/zoom); } private int c2fCS = -1; public void renderMain(VobScene vs, int into) { /* c2fCS = vs.coords.ortho(0, 0,0,0, 10,10); int c2fCSInv = vs.coords.ortho(0, 0,0,0, 10,10); vs.matcher.add(into, c2fCS, "C2F"); vs.matcher.add(into, c2fCSInv, "C2FINV"); */ c2fCS = vs.orthoCS(into, "C2F",0,0,0, 10,10); int c2fCSInv = vs.orthoCS(into, "C2FINV",0,0,0, 10,10); setZoomPan(vs, into); // XXX SinglePaper.i(space, d, window, current).render(vs, into, c2fCS, c2fCSInv, hook); } public void keystroke(String s) { pa("Key occured: "+s); } // Mouse press state // x, y, buttons private int [] m_state = null; private float m_state_zoom = -1; public boolean mouse(MouseEvent e, VobScene oldVobScene) { pa("mouse e"+e+" pans: "+panx+", "+pany); if (e.getID() == MouseEvent.MOUSE_PRESSED) { m_state = new int[]{ e.getX(), e.getY(), e.getModifiers()}; m_state_zoom = zoom; return false; } if (m_state == null) throw new Error("Mouse state not found!"); if (m_state[2] == e.BUTTON1_MASK){ float[] pt = new float[] { e.getX(), e.getY(), 0 }; // We must transform into Frame, and then the C2F coordinate system int mainctrCS = ((DefaultVobMatcher)oldVobScene.matcher).getCS(0, "Center"); pa("mainctr"+ mainctrCS); int frame = ((DefaultVobMatcher)oldVobScene.matcher).getCS(mainctrCS, "MAINVP"); int c2f = ((DefaultVobMatcher)oldVobScene.matcher).getCS(frame, "C2F"); if (c2f < 0) c2f = c2fCS; if(frame < 0 || c2f < 0) throw new Error("No cs point!"+frame+" "+c2f); // XXX vp, not frame! oldVobScene.coords.inverseTransformPoints3(mainctrCS, pt, pt); oldVobScene.coords.inverseTransformPoints3(c2f, pt, pt); panx = pt[0]; pany = pt[1]; // XXX current = current.h(d.contains); AbstractUpdateManager.chg(); return false; } if (m_state[2] == e.BUTTON3_MASK) { zoom = m_state_zoom * (float) Math.exp((m_state[0] - e.getY())/150.0); pa("Zoom: " + zoom); AbstractUpdateManager.chg(); return false; } AbstractUpdateManager.chg(); return false; } public void setZoom(float z) { zoom = z; } public void moveTo(float x, float y) { panx=x; pany=y; } }