gzz-commits
[Top][All Lists]
Advanced

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

[Gzz-commits] fenfire/org/fenfire spanimages/SpanImageVob.jav...


From: Tuomas J. Lukka
Subject: [Gzz-commits] fenfire/org/fenfire spanimages/SpanImageVob.jav...
Date: Wed, 13 Aug 2003 12:56:29 -0400

CVSROOT:        /cvsroot/fenfire
Module name:    fenfire
Branch:         
Changes by:     Tuomas J. Lukka <address@hidden>        03/08/13 12:56:29

Modified files:
        org/fenfire/spanimages: SpanImageVob.java 
        org/fenfire/spanimages/gl: PoolManager.java 
        org/fenfire/view: AreaSelectingView2D.java CanvasView2D.java 
                          IrregularViewportView2D.java 
                          PageScrollView2D.java PageSpanLayout.java 
                          PaperView2D.java View2D.java 

Log message:
        Fix getting selection

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/spanimages/SpanImageVob.java.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/spanimages/gl/PoolManager.java.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/AreaSelectingView2D.java.diff?tr1=1.12&tr2=1.13&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/CanvasView2D.java.diff?tr1=1.24&tr2=1.25&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/IrregularViewportView2D.java.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/PageScrollView2D.java.diff?tr1=1.9&tr2=1.10&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/PageSpanLayout.java.diff?tr1=1.19&tr2=1.20&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/PaperView2D.java.diff?tr1=1.16&tr2=1.17&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/View2D.java.diff?tr1=1.7&tr2=1.8&r1=text&r2=text

Patches:
Index: fenfire/org/fenfire/spanimages/SpanImageVob.java
diff -u fenfire/org/fenfire/spanimages/SpanImageVob.java:1.3 
fenfire/org/fenfire/spanimages/SpanImageVob.java:1.4
--- fenfire/org/fenfire/spanimages/SpanImageVob.java:1.3        Tue Jun 24 
07:11:52 2003
+++ fenfire/org/fenfire/spanimages/SpanImageVob.java    Wed Aug 13 12:56:28 2003
@@ -44,6 +44,16 @@
      * Does not check whether it is inside or not.
      */
     float getRealY(float spany);
+
+    /** Get the image (span) coordinate from the coordinate
+     * inside the vob.
+     */
+    int getSpanX(float vobx);
+    /** Get the image (span) coordinate from the coordinate
+     * inside the vob.
+     */
+    int getSpanY(float voby);
+
 }
 
 
Index: fenfire/org/fenfire/spanimages/gl/PoolManager.java
diff -u fenfire/org/fenfire/spanimages/gl/PoolManager.java:1.7 
fenfire/org/fenfire/spanimages/gl/PoolManager.java:1.8
--- fenfire/org/fenfire/spanimages/gl/PoolManager.java:1.7      Thu Jun 26 
04:54:18 2003
+++ fenfire/org/fenfire/spanimages/gl/PoolManager.java  Wed Aug 13 12:56:28 2003
@@ -69,6 +69,12 @@
        public float getRealY(float spany) {
            return h * (spany-sy0) / (sy1-sy0);
        }
+       public int getSpanX(float vobx) {
+           return (int)(vobx * (sx1-sx0) / w + sx0);
+       }
+       public int getSpanY(float voby) {
+           return (int)(voby * (sy1-sy0) / h + sy0);
+       }
     }
 
     /** Make a SpanImageVob whose SingleImage's texture allocation will 
Index: fenfire/org/fenfire/view/AreaSelectingView2D.java
diff -u fenfire/org/fenfire/view/AreaSelectingView2D.java:1.12 
fenfire/org/fenfire/view/AreaSelectingView2D.java:1.13
--- fenfire/org/fenfire/view/AreaSelectingView2D.java:1.12      Wed Jul 30 
06:32:10 2003
+++ fenfire/org/fenfire/view/AreaSelectingView2D.java   Wed Aug 13 12:56:28 2003
@@ -42,6 +42,10 @@
     private final String CONCAT = "AreaSelectingView_concat";
     private final String SELECT = "AreaSelectingView_selection";
 
+    public Object getSelectedObject(Object plane, float x, float y, float w, 
float h) {
+       return child.getSelectedObject(plane, x, y, w, h);
+    }
+
     public void render(VobScene vs, Object plane,
                        int matchingParent,
                        int box2screen, int box2paper) {
Index: fenfire/org/fenfire/view/CanvasView2D.java
diff -u fenfire/org/fenfire/view/CanvasView2D.java:1.24 
fenfire/org/fenfire/view/CanvasView2D.java:1.25
--- fenfire/org/fenfire/view/CanvasView2D.java:1.24     Mon Aug  4 02:02:48 2003
+++ fenfire/org/fenfire/view/CanvasView2D.java  Wed Aug 13 12:56:28 2003
@@ -45,7 +45,7 @@
 /** A View2D of a CANVAS2D, with a given node function.
  */
 public class CanvasView2D extends View2D implements NodedView2D, 
org.fenfire.view.lava.FastView {
-public static final String rcsid = "$Id: CanvasView2D.java,v 1.24 2003/08/04 
06:02:48 mudyc Exp $";
+public static final String rcsid = "$Id: CanvasView2D.java,v 1.25 2003/08/13 
16:56:28 tjl Exp $";
     public static boolean dbg = false;
     private static void p(String s) { System.out.println("CanvasView2D:: "+s); 
}
     
@@ -66,6 +66,10 @@
            "Color 0 0 0 0.6\n"
        );
        lineconn.glteardown = GLCache.getCallList("PopAttrib");
+    }
+
+    public Object getSelectedObject(Object plane, float x, float y, float w, 
float h) {
+       return null;
     }
 
 
Index: fenfire/org/fenfire/view/IrregularViewportView2D.java
diff -u fenfire/org/fenfire/view/IrregularViewportView2D.java:1.8 
fenfire/org/fenfire/view/IrregularViewportView2D.java:1.9
--- fenfire/org/fenfire/view/IrregularViewportView2D.java:1.8   Wed Jun 11 
13:00:24 2003
+++ fenfire/org/fenfire/view/IrregularViewportView2D.java       Wed Aug 13 
12:56:28 2003
@@ -92,6 +92,10 @@
        }
     };
 
+    public Object getSelectedObject(Object plane, float x, float y, float w, 
float h) {
+       return child.getSelectedObject(plane, x, y, w, h);
+    }
+
     public void render(VobScene vs, 
                Object plane,
                int matchingParent,
Index: fenfire/org/fenfire/view/PageScrollView2D.java
diff -u fenfire/org/fenfire/view/PageScrollView2D.java:1.9 
fenfire/org/fenfire/view/PageScrollView2D.java:1.10
--- fenfire/org/fenfire/view/PageScrollView2D.java:1.9  Sat Jul 19 05:04:36 2003
+++ fenfire/org/fenfire/view/PageScrollView2D.java      Wed Aug 13 12:56:28 2003
@@ -1,7 +1,7 @@
 /*
 PageScrollView2D.java
  *    
- *    Copyright (c) 2003 by Benja Fallenstein
+ *    Copyright (c) 2003 by Benja Fallenstein and Tuomas J. Lukka
  *    
  *    This file is part of Fenfire.
  *    
@@ -22,7 +22,7 @@
  *    
  */
 /*
- * Written by Benja Fallenstein
+ * Written by Benja Fallenstein and Tuomas J. Lukka
  */
 package org.fenfire.view;
 import org.fenfire.spanimages.*;
@@ -70,6 +70,12 @@
        PageSpanLayout layout = (PageSpanLayout)scroll2layout.f(null, block);
        wh[0] = layout.getWidth();
        wh[1] = layout.getHeight();
+    }
+
+    public Object getSelectedObject(Object plane, float x, float y, float w, 
float h) {
+       PageScrollBlock block = (PageScrollBlock)plane;
+       PageSpanLayout layout = (PageSpanLayout)scroll2layout.f(null, block);
+       return layout.getSelection(x, y, w, h);
     }
 
     public void render(VobScene vs, 
Index: fenfire/org/fenfire/view/PageSpanLayout.java
diff -u fenfire/org/fenfire/view/PageSpanLayout.java:1.19 
fenfire/org/fenfire/view/PageSpanLayout.java:1.20
--- fenfire/org/fenfire/view/PageSpanLayout.java:1.19   Sat Aug  9 08:31:16 2003
+++ fenfire/org/fenfire/view/PageSpanLayout.java        Wed Aug 13 12:56:28 2003
@@ -34,7 +34,6 @@
 import org.nongnu.libvob.*;
 import org.nongnu.libvob.gl.*;
 import org.nongnu.alph.*;
-import org.nongnu.alph.impl.*;
 import org.fenfire.spanimages.*;
 
 /** A single pagespan enfilade laid out on the plane.
@@ -48,6 +47,9 @@
     public static SpanImageFactory spanImageFactory =
                SpanImageFactory.getDefaultInstance();
 
+    public static Enfilade1D.Maker enfilade1DMaker = 
+       org.nongnu.alph.impl.Enfilade1DImpl.theMaker;
+
     private int npages;
     private PageImageSpan[] pages;
     private SpanImageVob[] spivs;
@@ -226,35 +228,39 @@
 
     /** Get selected area of pagespanlayout in enfilade
      */
-    public Enfilade1D getSelection(int x, int y, int width, int height) {
+    public Enfilade1D getSelection(float x, float y, float width, float 
height) {
        if (x<0 || y<0) throw new Error ("X or Y smaller than zero, x:"+x+", 
y:"+y);
 
-       int w=0,  wLeft = width, p=0;
-       Enfilade1D enf = null;
+       Enfilade1D enf = enfilade1DMaker.makeEnfilade();
 
        // Go into page where selection starts
-       for (; p<pages.length; p++) {
-           if (x < pages[p].getSize().width + w) break;
-           w += pages[p].getSize().width;
-       }
+       for (int p = 0; p<pages.length; p++)  {
+           // Vob coordinates of the intersecting rectangle
+           float sx0, sx1, sy0, sy1;
+
+           sx0 = x - xywh[4*p];
+           sy0 = y - xywh[4*p+1];
+
+           sx1 = x + width - xywh[4*p];
+           sy1 = y + height - xywh[4*p + 1];
+
+           int rx0, rx1, ry0, ry1;
+           
+           rx0 = spivs[p].getSpanX(sx0);
+           ry0 = spivs[p].getSpanY(sy0);
+           rx1 = spivs[p].getSpanX(sx1);
+           ry1 = spivs[p].getSpanY(sy1);
+
+           if(rx0 < 0) rx0 = 0;
+           if(ry0 < 0) ry0 = 0;
+
+           Dimension d = pages[p].getSize();
+           if(rx0 >= d.width) continue;
+           if(ry0 >= d.height) continue;
+           if(rx1 >= d.width) rx1 = d.width - 1;
+           if(ry1 >= d.height) ry1 = d.height - 1;
 
-       w = 0;
-       for (; p<pages.length; p++) {
-           // check y
-           if (y > pages[p].getSize().height) throw new Error("Selection out 
of page,"+p+", y:"+y);
-           // check height
-           if ((y + height) > pages[p].getSize().height) throw new 
Error("Selection out of page,"+p+", h:"+height);
-
-           // everything ok, so get a clip from page for returning enfilade.
-           if (enf == null) {
-               w = (int)Math.min(wLeft, pages[p].getSize().width - x);
-               enf = new Enfilade1DImpl(pages[p].subArea(x,y, w, height));
-           } else {
-               w = (int)Math.min(wLeft, pages[p].getSize().width);
-               Enfilade1D.Maker m = enf.getMaker();
-               enf.plus(m.makeEnfilade(pages[p].subArea(0,y, w, height)));
-           }
-           wLeft -= w;
+           enf.plus(enfilade1DMaker.makeEnfilade(pages[p].subArea(rx0,ry0, 
rx1-rx0, ry1-ry0)));
        }
        return enf;
     }
Index: fenfire/org/fenfire/view/PaperView2D.java
diff -u fenfire/org/fenfire/view/PaperView2D.java:1.16 
fenfire/org/fenfire/view/PaperView2D.java:1.17
--- fenfire/org/fenfire/view/PaperView2D.java:1.16      Tue Aug  5 05:54:18 2003
+++ fenfire/org/fenfire/view/PaperView2D.java   Wed Aug 13 12:56:28 2003
@@ -36,7 +36,7 @@
  * this other view is rendered on top of the paper.
  */
 public class PaperView2D extends View2D {
-public static final String rcsid = "$Id: PaperView2D.java,v 1.16 2003/08/05 
09:54:18 tjl Exp $";
+public static final String rcsid = "$Id: PaperView2D.java,v 1.17 2003/08/13 
16:56:28 tjl Exp $";
     public static boolean dbg = false;
     private static void pa(String s) { System.out.println("PaperView2D::"+s); }
 
@@ -59,6 +59,10 @@
 
     private float[] tmp = new float[2];
     private float[] tmp2 = new float[2];
+
+    public Object getSelectedObject(Object plane, float x, float y, float w, 
float h) {
+       return child.getSelectedObject(plane, x, y, w, h);
+    }
 
     public void render(VobScene vs, 
                Object plane,
Index: fenfire/org/fenfire/view/View2D.java
diff -u fenfire/org/fenfire/view/View2D.java:1.7 
fenfire/org/fenfire/view/View2D.java:1.8
--- fenfire/org/fenfire/view/View2D.java:1.7    Wed Jul 30 08:38:32 2003
+++ fenfire/org/fenfire/view/View2D.java        Wed Aug 13 12:56:28 2003
@@ -115,4 +115,13 @@
      */
     public View2D getChildView2D() { return null; }
 
+    /** Get an object describing (as a selection) what
+     * is inside a rectangular region.
+     * This may be null, if it doesn't make sense
+     * to describe it yet, such as Canvas views -
+     * for a Page Scroll view, it's a PageImageSpan
+     * of the page that most overlaps the rectangle..
+     */
+    public abstract Object getSelectedObject(Object plane, float x, float y, 
float w, float h);
+
 }




reply via email to

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