gzz-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gzz-commits] fenfire/org/fenfire swamp/CachedNodeFunction.ja...


From: Tuomas J. Lukka
Subject: [Gzz-commits] fenfire/org/fenfire swamp/CachedNodeFunction.ja...
Date: Sun, 27 Apr 2003 07:40:27 -0400

CVSROOT:        /cvsroot/fenfire
Module name:    fenfire
Changes by:     Tuomas J. Lukka <address@hidden>        03/04/27 07:40:27

Modified files:
        org/fenfire/swamp: CachedNodeFunction.java 
        org/fenfire/view: PageScrollView2D.java PageSpanLayout.java 
                          PaperView2D.java 
        org/fenfire/view/buoy: MainNode2D.java NodeType2D.java 
                               PPConnector.java 
                               TransclusionConnector.java 

Log message:
        More work for buoyoing

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/swamp/CachedNodeFunction.java.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/PageScrollView2D.java.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/PageSpanLayout.java.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/PaperView2D.java.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/MainNode2D.java.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/NodeType2D.java.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/PPConnector.java.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/buoy/TransclusionConnector.java.diff?tr1=1.1&tr2=1.2&r1=text&r2=text

Patches:
Index: fenfire/org/fenfire/swamp/CachedNodeFunction.java
diff -u fenfire/org/fenfire/swamp/CachedNodeFunction.java:1.4 
fenfire/org/fenfire/swamp/CachedNodeFunction.java:1.5
--- fenfire/org/fenfire/swamp/CachedNodeFunction.java:1.4       Thu Apr 24 
09:14:15 2003
+++ fenfire/org/fenfire/swamp/CachedNodeFunction.java   Sun Apr 27 07:40:27 2003
@@ -14,6 +14,9 @@
  * Second, no function whose return value depends
  * on anything except the passed parameters
  * (including the Graph) may be called.
+ * <p>
+ * As an aside, this class works completely also
+ * without a graph, for caching constant functions.
  */
 public class CachedNodeFunction implements NodeFunction {
 
@@ -65,9 +68,10 @@
            cache.put(node, cac);
        }
        if(cac.value == DIRTY) {
-           ConstGraph og = ourGraph.getObservedConstGraph(cac);
+           ConstGraph og = (ourGraph == null ? 
+                   null : ourGraph.getObservedConstGraph(cac));
            cac.value = f.f(og, node);
-           og.close();
+           if(og != null) og.close();
        }
        if(o != null)
            cac.addObs(o);
Index: fenfire/org/fenfire/view/PageScrollView2D.java
diff -u fenfire/org/fenfire/view/PageScrollView2D.java:1.3 
fenfire/org/fenfire/view/PageScrollView2D.java:1.4
--- fenfire/org/fenfire/view/PageScrollView2D.java:1.3  Sun Apr 27 04:05:32 2003
+++ fenfire/org/fenfire/view/PageScrollView2D.java      Sun Apr 27 07:40:27 2003
@@ -27,6 +27,7 @@
 package org.fenfire.view;
 import org.nongnu.libvob.VobScene;
 import org.nongnu.alph.*;
+import org.fenfire.swamp.*;
 
 /** A View2D showing a whole PageScrollBlock.
  *  The <code>plane</code> object passed to <code>render()</code>
@@ -34,14 +35,33 @@
  *  XXX cache?
  */
 public class PageScrollView2D extends View2D {
+
+    NodeFunction scroll2layout = new CachedNodeFunction(100, null,
+           new NodeFunction() {
+               public Object f(ConstGraph g, Object block0) {
+                   PageScrollBlock block = (PageScrollBlock)block0;
+                   return new PageSpanLayout(
+                       (PageSpan)block.getCurrent());
+               }
+           }
+           );
+
+    
+
+    public void getSize(Object plane, float[] wh) {
+       PageScrollBlock block = (PageScrollBlock)plane;
+       PageSpanLayout layout = (PageSpanLayout)scroll2layout.f(null, block);
+       wh[0] = layout.getWidth();
+       wh[1] = layout.getHeight();
+    }
+
     public void render(VobScene vs, 
                Object plane,
                int matchingParent,
                    int box2screen, int box2paper
                        ) {
        PageScrollBlock block = (PageScrollBlock)plane;
-       PageSpanLayout layout = 
-           new PageSpanLayout((PageSpan)block.getCurrent());
+       PageSpanLayout layout = (PageSpanLayout)scroll2layout.f(null, block);
        int paper2box = vs.invertCS(box2paper, "PGSVinv");
        int paper2screen = vs.concatCS(box2screen, "PGSVconc", paper2box);
        layout.place(vs, paper2screen, 1, 1, box2screen);
Index: fenfire/org/fenfire/view/PageSpanLayout.java
diff -u fenfire/org/fenfire/view/PageSpanLayout.java:1.5 
fenfire/org/fenfire/view/PageSpanLayout.java:1.6
--- fenfire/org/fenfire/view/PageSpanLayout.java:1.5    Thu Apr 24 13:53:32 2003
+++ fenfire/org/fenfire/view/PageSpanLayout.java        Sun Apr 27 07:40:27 2003
@@ -43,9 +43,12 @@
     private PageSpanPaper[] psps;
     private float[] xywh;
 
-    private float w; // XXX Kludge to be public
+    private float w; 
     private float h;
 
+    public float getWidth() { return w; }
+    public float getHeight() { return h; }
+
     /** Allocate the structure to hold a given number of pages.
      */
     private void alloc(int size) {
@@ -153,9 +156,6 @@
        }
        return null;
     }
-
-    public float getWidth() { return w; }
-    public float getHeight() { return h; }
 
     public void place(VobScene vs, int into) {
        place(vs, into, .0001f, 1f, -1);
Index: fenfire/org/fenfire/view/PaperView2D.java
diff -u fenfire/org/fenfire/view/PaperView2D.java:1.5 
fenfire/org/fenfire/view/PaperView2D.java:1.6
--- fenfire/org/fenfire/view/PaperView2D.java:1.5       Sat Apr 26 04:41:03 2003
+++ fenfire/org/fenfire/view/PaperView2D.java   Sun Apr 27 07:40:27 2003
@@ -13,7 +13,7 @@
  */
 public class PaperView2D extends View2D {
     public static boolean dbg = true;
-public static final String rcsid = "$Id: PaperView2D.java,v 1.5 2003/04/26 
08:41:03 tjl Exp $";
+public static final String rcsid = "$Id: PaperView2D.java,v 1.6 2003/04/27 
11:40:27 tjl Exp $";
     private static void pa(String s) { System.out.println("AlphContent: "+s); }
 
     public PaperMill paperMill;
@@ -72,5 +72,8 @@
                         box2screen, box2paper);
     }
 
+    public void getSize(Object plane, float[] wh) {
+       child.getSize(plane, wh);
+    }
 
 }
Index: fenfire/org/fenfire/view/buoy/MainNode2D.java
diff -u fenfire/org/fenfire/view/buoy/MainNode2D.java:1.10 
fenfire/org/fenfire/view/buoy/MainNode2D.java:1.11
--- fenfire/org/fenfire/view/buoy/MainNode2D.java:1.10  Fri Apr 25 10:11:49 2003
+++ fenfire/org/fenfire/view/buoy/MainNode2D.java       Sun Apr 27 07:40:27 2003
@@ -42,29 +42,29 @@
     private static void pa(String s) { System.out.println(s); }
     
     protected Object plane;
-    protected View2D view;
+    protected View2D view2d;
 
     protected float panX, panY;
     protected float zoom;
 
     private float tmp[] = new float[2];
 
-    public View2D getView() { return view; }
+    public View2D getView2D() { return view2d; }
 
     /** Create a main node with a given plane, pan, and zoom.
      */
-    public MainNode2D(Object plane, View2D view,
+    public MainNode2D(Object plane, View2D view2d,
                      float panX, float panY, float zoom) {
-       this.plane = plane; this.view = view;
+       this.plane = plane; this.view2d = view2d;
        this.panX = panX; this.panY = panY;
        this.zoom = zoom;
     }
     
     /** Create a main node focused the center of a given plane.
      */
-    public MainNode2D(Object plane, View2D view) {
-       this(plane, view, 0, 0, 1);
-       view.getSize(plane, tmp);
+    public MainNode2D(Object plane, View2D view2d) {
+       this(plane, view2d, 0, 0, 1);
+       view2d.getSize(plane, tmp);
        if(tmp[0] >= 0) {
            panX = tmp[0] / 2f;
            panY = tmp[1] / 2f;
@@ -86,7 +86,7 @@
        vs.matcher.add(box2screen, box2paper, "MainNode2D_B2P");
        setZoomPan(vs, box2paper);
 
-       view.render(vs, plane, into, into, box2paper);
+       view2d.render(vs, plane, into, into, box2paper);
     }
 
     /** Cause the changes to the zooming and panning variables
@@ -109,6 +109,21 @@
     private int [] m_state = null;
     private float m_state_zoom = -1;
     private float pan[] = new float[2];
+
+    private float[] v2dwh = new float[2];
+
+    /** Clip the values in Pan to the size of the canvas.
+     */
+    private void clipPan() {
+       view2d.getSize(plane, v2dwh);
+       if(v2dwh[0] >= 0) {
+           if(panX < 0) panX = 0;
+           if(panX > v2dwh[0]) panX = v2dwh[0];
+           if(panY < 0) panY = 0;
+           if(panY > v2dwh[1]) panY = v2dwh[1];
+       }
+    }
+
     public boolean mouse(MouseEvent e, VobScene oldVobScene) {
        if (e.getID() == MouseEvent.MOUSE_PRESSED) {
            m_state = new int[]{ e.getX(), e.getY(), e.getModifiers()};
@@ -133,6 +148,7 @@
           e.getID() == MouseEvent.MOUSE_DRAGGED) {
            panX = pan[0] + (m_state[0] - e.getX())/zoom;
            panY = pan[1] + (m_state[1] - e.getY())/zoom;
+           clipPan();
 
            setZoomPan(oldVobScene, box2screen);
            return true;
@@ -152,6 +168,7 @@
            if(dbg) pa("P3: "+pt[0]+" "+pt[1]+" "+pt[2]);
 
            panX = pt[0]; panY = pt[1];
+           clipPan();
                
            AbstractUpdateManager.chg();
            return false;
Index: fenfire/org/fenfire/view/buoy/NodeType2D.java
diff -u fenfire/org/fenfire/view/buoy/NodeType2D.java:1.4 
fenfire/org/fenfire/view/buoy/NodeType2D.java:1.5
--- fenfire/org/fenfire/view/buoy/NodeType2D.java:1.4   Sat Apr 26 04:41:04 2003
+++ fenfire/org/fenfire/view/buoy/NodeType2D.java       Sun Apr 27 07:40:27 2003
@@ -44,12 +44,12 @@
 
     public static int effigy = 0;
     
-    protected View2D view;
+    protected View2D view2d;
 
-    public View2D getView() { return view; }
+    public View2D getView2D() { return view2d; }
 
-    public NodeType2D(View2D view) {
-       this.view = view;
+    public NodeType2D(View2D view2d) {
+       this.view2d = view2d;
     }
     
     public Object getSize(Object linkId, Object anchor,
@@ -90,7 +90,7 @@
 //                                        w, h);
        vs.matcher.add(into, box2paper, "BUOYPAP");
 
-       view.render(vs, plane, into, into, box2paper);
+       view2d.render(vs, plane, into, into, box2paper);
 
        return vs.coords.translate(into, w/2f, h/2f);
     }
@@ -101,7 +101,7 @@
        Object plane = p.first;
        Rectangle rect = (Rectangle)p.second;
 
-       return new MainNode2D(plane, view,
+       return new MainNode2D(plane, view2d,
                              rect.x+rect.width/2f,
                              rect.y+rect.height/2f, 1);
     }
Index: fenfire/org/fenfire/view/buoy/PPConnector.java
diff -u fenfire/org/fenfire/view/buoy/PPConnector.java:1.2 
fenfire/org/fenfire/view/buoy/PPConnector.java:1.3
--- fenfire/org/fenfire/view/buoy/PPConnector.java:1.2  Sat Apr 26 04:31:41 2003
+++ fenfire/org/fenfire/view/buoy/PPConnector.java      Sun Apr 27 07:40:27 2003
@@ -16,19 +16,19 @@
 /** Make the kinds of links familiar from PP structure.
  */
 public class PPConnector implements BuoyViewConnector {
-public static final String rcsid = "$Id: PPConnector.java,v 1.2 2003/04/26 
08:31:41 tjl Exp $";
+public static final String rcsid = "$Id: PPConnector.java,v 1.3 2003/04/27 
11:40:27 tjl Exp $";
     public static boolean dbg = false;
     private static void pa(String s) { System.out.println("PPLinker:"+s); }
 
     public static boolean hackForTesting = false;
 
     private Fen fen;
-    private View2D view;
+    private View2D view2d;
     private BuoyViewNodeType nodeType;
-    public PPConnector(Fen fen, View2D view) {
+    public PPConnector(Fen fen, View2D view2d) {
        this.fen = fen;
-       this.view = view;
-       this.nodeType = new NodeType2D(view);
+       this.view2d = view2d;
+       this.nodeType = new NodeType2D(view2d);
     }
 
     public void addBuoys(VobScene vs, int parentCs,
@@ -36,7 +36,7 @@
                         BuoyLinkListener l) {
        if(!(mainNode instanceof MainNode2D)) return;
        MainNode2D mn2d = (MainNode2D)mainNode;
-       if(mn2d.getView() != view && !hackForTesting) return;
+       if(mn2d.getView2D() != view2d && !hackForTesting) return;
 
        DefaultVobMatcher m = (DefaultVobMatcher)vs.matcher;
        for(Iterator i=m.getKeys(parentCs).iterator(); i.hasNext();) {
Index: fenfire/org/fenfire/view/buoy/TransclusionConnector.java
diff -u fenfire/org/fenfire/view/buoy/TransclusionConnector.java:1.1 
fenfire/org/fenfire/view/buoy/TransclusionConnector.java:1.2
--- fenfire/org/fenfire/view/buoy/TransclusionConnector.java:1.1        Sun Apr 
27 04:05:32 2003
+++ fenfire/org/fenfire/view/buoy/TransclusionConnector.java    Sun Apr 27 
07:40:27 2003
@@ -20,7 +20,7 @@
 /** Hang transclusion buoys.
  */
 public class TransclusionConnector implements BuoyViewConnector {
-public static final String rcsid = "$Id: TransclusionConnector.java,v 1.1 
2003/04/27 08:05:32 tjl Exp $";
+public static final String rcsid = "$Id: TransclusionConnector.java,v 1.2 
2003/04/27 11:40:27 tjl Exp $";
     public static boolean dbg = true;
     private static void pa(String s) { System.out.println("PPLinker:"+s); }
 
@@ -60,7 +60,7 @@
                         BuoyLinkListener l) {
        if(!(mainNode instanceof MainNode2D)) return;
        MainNode2D mn2d = (MainNode2D)mainNode;
-       if(mn2d.getView() == normalNodeNodeType.getView()) {
+       if(mn2d.getView2D() == normalNodeNodeType.getView2D()) {
            DefaultVobMatcher m = (DefaultVobMatcher)vs.matcher;
            // Loop over the placed nodes' keys
            for(Iterator i=m.getKeys(parentCs).iterator(); i.hasNext();) {
@@ -84,7 +84,7 @@
 
            }
 
-       } else if(mn2d.getView() == pageImageScrollNodeType.getView()) {
+       } else if(mn2d.getView2D() == pageImageScrollNodeType.getView2D()) {
            pa("TransclusionConnector: Pagescroll -> outside not impl");
        } else {}
            pa("TransclusionConnector: Unknown view2d type");




reply via email to

[Prev in Thread] Current Thread [Next in Thread]