[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gzz-commits] fenfire/org/fenfire/view/buoy MainNode2D.java
From: |
Benja Fallenstein |
Subject: |
[Gzz-commits] fenfire/org/fenfire/view/buoy MainNode2D.java |
Date: |
Fri, 25 Apr 2003 08:16:02 -0400 |
CVSROOT: /cvsroot/fenfire
Module name: fenfire
Changes by: Benja Fallenstein <address@hidden> 03/04/25 08:16:02
Modified files:
org/fenfire/view/buoy: MainNode2D.java
Log message:
Start porting mouse code for moving on 2D planes
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/MainNode2D.java.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
Patches:
Index: fenfire/org/fenfire/view/buoy/MainNode2D.java
diff -u fenfire/org/fenfire/view/buoy/MainNode2D.java:1.5
fenfire/org/fenfire/view/buoy/MainNode2D.java:1.6
--- fenfire/org/fenfire/view/buoy/MainNode2D.java:1.5 Thu Apr 24 16:52:24 2003
+++ fenfire/org/fenfire/view/buoy/MainNode2D.java Fri Apr 25 08:16:02 2003
@@ -1,7 +1,7 @@
/*
PageScrollView2D.java
*
- * Copyright (c) 2003 by Benja Fallenstein
+ * Copyright (c) 2003 by Benja Fallenstein and Matti Katila
*
* This file is part of Fenfire.
*
@@ -22,11 +22,13 @@
*
*/
/*
- * Written by Benja Fallenstein
+ * Written by Benja Fallenstein
+ * Based on code by Matti Katila
*/
package org.fenfire.view.buoy;
import org.fenfire.view.View2D;
import org.nongnu.libvob.*;
+import org.nongnu.libvob.impl.DefaultVobMatcher;
import org.nongnu.libvob.buoy.*;
import java.awt.event.MouseEvent;
@@ -36,6 +38,8 @@
* command for moving on the spatial plane.
*/
public class MainNode2D implements BuoyViewMainNode {
+ public static boolean dbg = false;
+ private static void pa(String s) { System.out.println(s); }
protected Object plane;
protected View2D view;
@@ -65,19 +69,98 @@
}
}
+ private int focusFrame = -1;
+ private int box2paper = -1;
+ private float w, h;
public void renderMain(VobScene vs, int into) {
vs.coords.getSqSize(into, tmp);
- float w = tmp[0], h = tmp[1];
- int box2paper =
+ w = tmp[0]; h = tmp[1];
+ focusFrame = into;
+ box2paper =
vs.coords.orthoBox(0, 0, panX-w/2, panY-h/2,
1/zoom, 1/zoom, w, h);
+
view.render(vs, plane, into, into, box2paper);
}
public void keystroke(String s) {
// XXX
}
+
+ // Mouse press state
+ // x, y, buttons
+ private int [] m_state = null;
+ private float m_state_zoom = -1;
+ private float pan[] = new float[2];
public boolean mouse(MouseEvent e, VobScene oldVobScene) {
- // XXX
+ if (e.getID() == MouseEvent.MOUSE_PRESSED) {
+ m_state = new int[]{ e.getX(), e.getY(), e.getModifiers()};
+ m_state_zoom = zoom;
+ pan[0] = panX; pan[1] = panY;
+
+ return false;
+ }
+ if (m_state == null) throw new Error("Mouse state not found!");
+
+ // let's zoom!!
+ if (m_state[2] == e.BUTTON3_MASK) {
+ zoom = m_state_zoom * (float)
+ Math.exp((m_state[1] - e.getY())/150.0);
+ AbstractUpdateManager.setNoAnimation();
+ setZoomPan(oldVobScene, focusFrame);
+ return true;
+ }
+
+ // Move by dragging with button 1
+ if (m_state[2] == e.BUTTON1_MASK && e.getID() ==
MouseEvent.MOUSE_DRAGGED) {
+ panX = pan[0] + (m_state[0] - e.getX())/zoom;
+ panY = pan[1] + (m_state[1] - e.getY())/zoom;
+
+ setZoomPan(oldVobScene, focusFrame);
+ return true;
+ }
+
+ // Move around by clicking
+ if (m_state[2] == e.BUTTON1_MASK && e.getID() ==
MouseEvent.MOUSE_CLICKED){
+
+ 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,
"FocusCenter");
+ //pa("mainctr"+ mainctrCS);
+
+ int frame =
((DefaultVobMatcher)oldVobScene.matcher).getCS(mainctrCS, "FocusFrame");
+ //int frame = focusFrame;
+ int f2c = ((DefaultVobMatcher)oldVobScene.matcher).getCS(frame,
"F2C");
+ if (f2c < 0) f2c = box2paper;
+ if(frame < 0 || f2c < 0)
+ throw new Error("No cs point!"+frame+" "+f2c);
+
+ // XXX vp, not frame!
+ oldVobScene.coords.inverseTransformPoints3(mainctrCS, pt, pt);
+ //oldVobScene.coords.inverseTransformPoints3(frame, pt, pt);
+ oldVobScene.coords.transformPoints3(f2c, pt, pt);
+ panX = pt[0]; panY = pt[1];
+
+ // XXX current = current.h(d.contains);
+ //setZoomPan(oldVobScene, focusFrame);
+ AbstractUpdateManager.chg();
+ return false;
+ }
+
+ if(dbg) pa("nothing!");
return false;
+ }
+
+
+ /** 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;
+ // The point is that cs should transform (panx, pany) to (0,0)
+ // and (panx+1, pany+1) to (zoom, zoom)
+ vs.coords.setOrthoBoxParams(box2paper, 0, panX-w/2, panY-h/2,
+ 1/zoom, 1/zoom, w, h);
}
}