gzz-commits
[Top][All Lists]
Advanced

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

[Gzz-commits] fenfire/org/fenfire spanimages/SpanImageFactory...


From: Tuomas J. Lukka
Subject: [Gzz-commits] fenfire/org/fenfire spanimages/SpanImageFactory...
Date: Tue, 24 Jun 2003 07:11:52 -0400

CVSROOT:        /cvsroot/fenfire
Module name:    fenfire
Branch:         
Changes by:     Tuomas J. Lukka <address@hidden>        03/06/24 07:11:52

Modified files:
        org/fenfire/spanimages: SpanImageFactory.java SpanImageVob.java 
        org/fenfire/spanimages/gl: DefaultSpanImageFactory.java 
                                   PoolManager.java SingleImage.java 
        org/fenfire/view: PageScrollView2D.java PageSpanLayout.java 
                          pagespanlayout.test 

Log message:
        Make pagespanlayout use new spanimage api, simplifying it quite 
successfully

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/spanimages/SpanImageFactory.java.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/spanimages/SpanImageVob.java.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/spanimages/gl/DefaultSpanImageFactory.java.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/spanimages/gl/PoolManager.java.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/spanimages/gl/SingleImage.java.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/PageScrollView2D.java.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/PageSpanLayout.java.diff?tr1=1.12&tr2=1.13&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/pagespanlayout.test.diff?tr1=1.9&tr2=1.10&r1=text&r2=text

Patches:
Index: fenfire/org/fenfire/spanimages/SpanImageFactory.java
diff -u fenfire/org/fenfire/spanimages/SpanImageFactory.java:1.4 
fenfire/org/fenfire/spanimages/SpanImageFactory.java:1.5
--- fenfire/org/fenfire/spanimages/SpanImageFactory.java:1.4    Mon Jun 23 
08:28:50 2003
+++ fenfire/org/fenfire/spanimages/SpanImageFactory.java        Tue Jun 24 
07:11:52 2003
@@ -25,6 +25,7 @@
  */
 
 package org.fenfire.spanimages;
+import org.fenfire.spanimages.gl.*;
 import org.nongnu.alph.*;
 
 /** The central interface for creating vobs that contain
@@ -37,8 +38,14 @@
  * the imagespan contains vector data.
  */
 public abstract class SpanImageFactory {
+    private static SpanImageFactory instance;
+
     public static SpanImageFactory getDefaultInstance() {
-       return null;
+       // XXX This is wrong - need a mux to handle images!
+       if(instance == null)
+           instance = new DefaultSpanImageFactory(
+                   new PageScrollBlockImager());
+       return instance;
     }
 
     abstract public SpanImageVob getSpanImageVob(ImageSpan s);
Index: fenfire/org/fenfire/spanimages/SpanImageVob.java
diff -u fenfire/org/fenfire/spanimages/SpanImageVob.java:1.2 
fenfire/org/fenfire/spanimages/SpanImageVob.java:1.3
--- fenfire/org/fenfire/spanimages/SpanImageVob.java:1.2        Wed Jun 11 
13:00:24 2003
+++ fenfire/org/fenfire/spanimages/SpanImageVob.java    Tue Jun 24 07:11:52 2003
@@ -33,6 +33,17 @@
 public interface SpanImageVob extends Vob {
     float getWidth();
     float getHeight();
+
+    /** Get the real x coordinate (inside this Vob)
+     * of the given image coordinate.
+     * Does not check whether it is inside or not.
+     */
+    float getRealX(float spanx);
+    /** Get the real y coordinate (inside this Vob)
+     * of the given image coordinate.
+     * Does not check whether it is inside or not.
+     */
+    float getRealY(float spany);
 }
 
 
Index: fenfire/org/fenfire/spanimages/gl/DefaultSpanImageFactory.java
diff -u fenfire/org/fenfire/spanimages/gl/DefaultSpanImageFactory.java:1.6 
fenfire/org/fenfire/spanimages/gl/DefaultSpanImageFactory.java:1.7
--- fenfire/org/fenfire/spanimages/gl/DefaultSpanImageFactory.java:1.6  Tue Jun 
24 06:02:33 2003
+++ fenfire/org/fenfire/spanimages/gl/DefaultSpanImageFactory.java      Tue Jun 
24 07:11:52 2003
@@ -36,7 +36,7 @@
 import java.awt.Point;
 
 public class DefaultSpanImageFactory extends SpanImageFactory {
-    public static boolean dbg = true;
+    public static boolean dbg = false;
     private static void p(String s) { 
        System.out.println("DefaultSpanImageFactory: "+s); }
 
@@ -113,7 +113,10 @@
                    paper,
                    texgen,
                    ps.width / (float)d.width * x1 / xscale,
-                   ps.height / (float)d.height * y1 / yscale);
+                   ps.height / (float)d.height * y1 / yscale,
+                   p.x, p.y,
+                   p.x+ps.width, p.y+ps.height
+                   );
 
     }
 }
Index: fenfire/org/fenfire/spanimages/gl/PoolManager.java
diff -u fenfire/org/fenfire/spanimages/gl/PoolManager.java:1.5 
fenfire/org/fenfire/spanimages/gl/PoolManager.java:1.6
--- fenfire/org/fenfire/spanimages/gl/PoolManager.java:1.5      Tue Jun 24 
06:02:33 2003
+++ fenfire/org/fenfire/spanimages/gl/PoolManager.java  Tue Jun 24 07:11:52 2003
@@ -33,7 +33,7 @@
 import java.util.*;
 
 public class PoolManager implements GL.StatsCallback {
-    public static boolean dbg = true;
+    public static boolean dbg = false;
     private static void p(String s) { 
        System.out.println("PoolManager: "+s); }
 
@@ -47,6 +47,8 @@
 
     class MySIV extends AbstractVob implements SpanImageVob {
        float w, h;
+       float sx0, sx1;
+       float sy0, sy1;
        GLRen.FixedPaperQuad quad;
        SingleImage img; // We don't want to GC it before the SIV!
        public float getWidth() { return w; };
@@ -58,6 +60,13 @@
        public int putGL(VobScene vs, int cs1) {
            return quad.putGL(vs, cs1);
        }
+
+       public float getRealX(float spanx) {
+           return w * (spanx-sx0) / (sx1-sx0);
+       }
+       public float getRealY(float spany) {
+           return h * (spany-sy0) / (sy1-sy0);
+       }
     }
 
     /** Make a SpanImageVob whose SingleImage's texture allocation will 
@@ -73,7 +82,9 @@
            SingleImage i, 
            Paper p, 
            float[] texgen,
-           float w, float h) {
+           float w, float h,
+           float sx0, float sy0,
+           float sx1, float sy1) {
        float mult = Math.abs(texgen[0] * texgen[5] - texgen[1] * texgen[4]);
 
        MySIV siv = new MySIV();
@@ -81,6 +92,9 @@
        siv.h = h;
        siv.img = i;
 
+       siv.sx0 = sx0; siv.sx1 = sx1; siv.sy0 = sy0; siv.sy1 = sy1;
+
+
        if(dbg) 
            p("Makevob: "+mult+" "+w+" "+h);
        siv.quad = GLRen.createFixedPaperQuad(
@@ -144,7 +158,7 @@
            int l = 0;
            if(dbg) p("Loop: "+i+" "+actives.length);
            for(; l < actives[i].missingPixels.length; l++) {
-               p("l "+l+"  miss: "+actives[i].missingPixels[l]);
+               if(dbg) p("l "+l+"  miss: "+actives[i].missingPixels[l]);
                if(actives[i].missingPixels[l] > .15 * actives[i].nPixels()) {
                    l--; 
                    break;
Index: fenfire/org/fenfire/spanimages/gl/SingleImage.java
diff -u fenfire/org/fenfire/spanimages/gl/SingleImage.java:1.7 
fenfire/org/fenfire/spanimages/gl/SingleImage.java:1.8
--- fenfire/org/fenfire/spanimages/gl/SingleImage.java:1.7      Tue Jun 24 
06:02:33 2003
+++ fenfire/org/fenfire/spanimages/gl/SingleImage.java  Tue Jun 24 07:11:52 2003
@@ -34,7 +34,7 @@
  * levels would be used.
  */
 public class SingleImage {
-    public static boolean dbg = true;
+    public static boolean dbg = false;
     private static void p(String s) { System.out.println("SingleImage: "+s); }
 
     public final MipzipLoader loader;
Index: fenfire/org/fenfire/view/PageScrollView2D.java
diff -u fenfire/org/fenfire/view/PageScrollView2D.java:1.6 
fenfire/org/fenfire/view/PageScrollView2D.java:1.7
--- fenfire/org/fenfire/view/PageScrollView2D.java:1.6  Mon Apr 28 04:57:27 2003
+++ fenfire/org/fenfire/view/PageScrollView2D.java      Tue Jun 24 07:11:52 2003
@@ -66,7 +66,7 @@
        PageSpanLayout layout = (PageSpanLayout)scroll2layout.f(null, block);
        int paper2box = vs.invertCS(box2paper, "PGSVinv");
        int paper2screen = vs.concatCS(box2screen, "PGSVconc", paper2box);
-       layout.place(vs, paper2screen, .05f, 1000f, -1 /*box2screen*/, 
matchingParent);
+       layout.place(vs, paper2screen, -1 /*box2screen*/, matchingParent);
     }
 
 
Index: fenfire/org/fenfire/view/PageSpanLayout.java
diff -u fenfire/org/fenfire/view/PageSpanLayout.java:1.12 
fenfire/org/fenfire/view/PageSpanLayout.java:1.13
--- fenfire/org/fenfire/view/PageSpanLayout.java:1.12   Wed Jun 11 13:00:24 2003
+++ fenfire/org/fenfire/view/PageSpanLayout.java        Tue Jun 24 07:11:52 2003
@@ -34,6 +34,7 @@
 import org.nongnu.libvob.*;
 import org.nongnu.libvob.gl.*;
 import org.nongnu.alph.*;
+import org.fenfire.spanimages.*;
 
 /** A single pagespan enfilade laid out on the plane.
  */
@@ -43,29 +44,12 @@
     public static boolean dbg = false;
     private void p(String s) { System.out.println("PageSpanLayout:: "+s); }
 
-    public static final float scale = 72 * 6;
-
-    public static float diceLength = 2f;
-    public static float diceLength2 = 16f;
-    public static int diceDepth = 20;
-    public static int  flags = 2;
-
-    public interface PageSpanPaperMaker {
-       PageSpanPaper getPaper(GLSpanner.SpanPage p, PageImageSpan sp);
-    }
-    public static class DefaultPageSpanPaperMaker implements 
PageSpanPaperMaker {
-       public PageSpanPaper getPaper(GLSpanner.SpanPage p, PageImageSpan sp) {
-           return new PageSpanPaper(p, sp.getScrollBlock().hashCode());
-       }
-    }
-    static public final DefaultPageSpanPaperMaker defaultPageSpanPaperMaker = 
new DefaultPageSpanPaperMaker();
-
-    public boolean useBg = true;
-    public boolean useText = true;
+    public static SpanImageFactory spanImageFactory =
+               SpanImageFactory.getDefaultInstance();
 
     private int npages;
     private PageImageSpan[] pages;
-    private PageSpanPaper[] psps;
+    private SpanImageVob[] spivs;
     private float[] xywh;
 
     private float w; 
@@ -79,7 +63,7 @@
     private void alloc(int size) {
        npages = size;
        pages = new PageImageSpan[npages];
-       psps = new PageSpanPaper[npages];
+       spivs = new SpanImageVob[npages];
        xywh = new float[npages * 4]; // x, y, w, h in PAPER coordinates
        w = 0;
        h = 0;
@@ -87,18 +71,16 @@
 
     /** (To be called with increasing p): add a page.
      */
-    private void page(int p, PageImageSpan sp, PageSpanPaperMaker 
pageSpanPaperMaker) {
+    private void page(int p, PageImageSpan sp, 
+               SpanImageFactory spanImageFactory) {
        pages[p] = sp; 
-       GLSpanner.SpanRect rect = GLSpanner.getSpanRect(pages[p]);
-       psps[p] = pageSpanPaperMaker.getPaper(rect.page, sp);
 
-       Point l_p = pages[p].getLocation();
-       Dimension d_p = pages[p].getSize();
+       spivs[p] = spanImageFactory.getSpanImageVob(sp);
 
-       xywh[4*p + 0] = psps[p].getX(l_p.x);
-       xywh[4*p + 1] = psps[p].getY(l_p.y);
-       xywh[4*p + 2] = psps[p].getX(d_p.width);
-       xywh[4*p + 3] = psps[p].getY(d_p.height);
+       xywh[4*p + 0] = 0;
+       xywh[4*p + 1] = 0;
+       xywh[4*p + 2] = spivs[p].getWidth();
+       xywh[4*p + 3] = spivs[p].getHeight();
 
        if(dbg) p("Page "+p+" "+
                  xywh[4*p+0]+" "+
@@ -107,15 +89,16 @@
                  xywh[4*p+3]+" "+
                  pages[p]);
 
-       w += scale * xywh[4*p + 2];
-       if(h < scale * xywh[4*p + 3])
-           h = scale * xywh[4*p + 3];
+       w += xywh[4*p + 2];
+       if(h < xywh[4*p + 3])
+           h = xywh[4*p + 3];
     }
 
     public PageSpanLayout(Enfilade1D enf) {
-       this(enf, defaultPageSpanPaperMaker);
+       this(enf, spanImageFactory);
     }
-    public PageSpanLayout(Enfilade1D enf, PageSpanPaperMaker maker) {
+    public PageSpanLayout(Enfilade1D enf, 
+                   SpanImageFactory spanImageFactory) {
        alloc(enf.length());
 
        for(int p = 0; p < npages; p++) {
@@ -123,29 +106,31 @@
            Object span = enf.sub(p, p+1).getList().get(0);
            if(span instanceof PageSpan)
                span = ((PageSpan)span).getPage(0);
-           page(p, (PageImageSpan)span, maker); 
+           page(p, (PageImageSpan)span, spanImageFactory); 
        }
 
     }
 
     public PageSpanLayout(PageSpan sp) {
-       this(sp, defaultPageSpanPaperMaker);
+       this(sp, spanImageFactory);
     }
 
-    public PageSpanLayout(PageSpan sp, PageSpanPaperMaker maker) {
+    public PageSpanLayout(PageSpan sp, 
+               SpanImageFactory spanImageFactory) {
        alloc(sp.length());
 
        for(int p = 0; p < npages; p++) {
-           page(p, sp.getPage(p), maker);
+           page(p, sp.getPage(p), spanImageFactory);
        }
     }
 
     public PageSpanLayout(PageImageSpan sp) {
-       this(sp, defaultPageSpanPaperMaker);
+       this(sp, spanImageFactory);
     }
 
-    public PageSpanLayout(PageImageSpan sp, PageSpanPaperMaker maker) {
-       page(0, sp, maker);
+    public PageSpanLayout(PageImageSpan sp, 
+               SpanImageFactory spanImageFactory) {
+       page(0, sp, spanImageFactory);
     }
 
 
@@ -164,12 +149,16 @@
                Point l_c = s.getLocation(); 
                Dimension d_c = s.getSize(); 
 
-               xywh_out[0] = curw + scale * psps[p].getX(l_c.x);
-               xywh_out[2] = scale * psps[p].getX(d_c.width);
+               float x0 = spivs[p].getRealX(l_c.x);
+               float x1 = spivs[p].getRealX(l_c.x+d_c.width);
+               float y0 = spivs[p].getRealY(l_c.y);
+               float y1 = spivs[p].getRealY(l_c.y+d_c.height);
 
-               xywh_out[1] = scale * (
-                               psps[p].getY(l_c.y) - xywh[4*p + 1]);
-               xywh_out[3] = scale * psps[p].getY(d_c.height);
+               xywh_out[0] = curw + x0;
+               xywh_out[2] = x1-x0;
+
+               xywh_out[1] = y0;
+               xywh_out[3] = y1-y0;
 
                if(dbg) p("Center found: "+p+" "+pages[p]+" "+
                          xywh_out[0] + " " + xywh_out[1] + " " +
@@ -177,56 +166,43 @@
                
                return xywh_out;
            }
-           curw += scale * xywh[4*p + 2];
+           curw += xywh[4*p + 2];
        }
        return null;
     }
 
     public void place(VobScene vs, int into) {
-       place(vs, into, .0001f, 1f, -1);
+       place(vs, into, -1, -1);
     }
 
-    public void place(VobScene vs, int into, float importance, float 
pixelscale) {
-
-       place(vs, into, importance, pixelscale, -1);
-    }
     /** Place this layout into the given coordinate system.
      * Note that the layout is not affected by the 
      * box size of the coordinate system.
      * @param cullCS The coordinate system against which
      *      all objects should be culled.
+     * @param matchCS the matching parent for the spans as keys of
+     *                         coordinate systems
      */
-    public void place(VobScene vs, int into, float importance, float 
pixelscale, int cullCS) {
-       this.place(vs, into, importance, pixelscale, cullCS, into);
-    }
-    public void place(VobScene vs, int into, float importance, float 
pixelscale, int cullCS,
-                       int matchCs) {
+    public void place(VobScene vs, int into, int cullCS, int matchCs) {
        float curx = 0;
        // Now we can draw the pages.
+       if(matchCs < 0) matchCs = into;
        for(int p = 0; p < npages; p++) {
+           if(dbg) p("Place page: "+p+" "+spivs[p]+" "+curx+" "+
+                       + xywh[4*p+2]+" "+
+                       + xywh[4*p+3]+" ");
            // We want a coordinate system
            // whose box is exactly the span
            int around = vs.coords.orthoBox(into, 0, 
-                           curx, 0, scale, scale,
+                           curx, 0, 1, 1,
                            xywh[4*p+2], xywh[4*p+3]);
            vs.matcher.add(matchCs, around, pages[p]);
            if(cullCS >= 0)
                around = vs.cullCS(around, "CULL", cullCS);
-           // and then translate to the whole page.
-           int tr = vs.translateCS(around, "T", -xywh[4*p+0], -xywh[4*p+1]);
-           curx += scale * xywh[4*p + 2];
-
-           psps[p].request(importance, scale * pixelscale);
-
-           vs.map.put(GLRen.createFixedPaperQuad(psps[p].getPaper(useBg, 
useText), 
-                       xywh[4*p + 0], 
-                       xywh[4*p + 1], 
-                       xywh[4*p + 0]+xywh[4*p + 2], 
-                       xywh[4*p + 1]+xywh[4*p + 3], flags,
-                       diceLength,
-                       diceLength2,
-                       diceDepth
-                       ), tr);
+
+           curx += xywh[4*p + 2];
+
+           vs.map.put(spivs[p], around);
        }
     }
 
@@ -235,37 +211,13 @@
      * Note that this won't interpolate nicely to
      * "place".
      */
-    public void placeBoxed(VobScene vs, int into, float importance, float 
pixelscale) {
+    public void placeBoxed(VobScene vs, int into) {
        int unit = vs.unitSqCS(into, "PSPCV.UNIT");
        int scaled = vs.scaleCS(unit, "PSPCV.SCALED",
                    1.0f / w, 1.0f / h);
-       place(vs, scaled, importance, pixelscale);
+       place(vs, scaled);
     }
 
-    /** Make a request for loading the textures into memory.
-     */
-    public void request(float x, float y, float radius, 
-                   float importanceAt, 
-                   float importanceOutside,
-                   float pixelscale) {
-       if(dbg) p("Request: "+x+" "+y+" "+radius);
-       float curx = 0;
-       for(int p = 0; p < npages; p++) {
-           float dx = Math.abs((curx + .5f * scale * xywh[4*p+2]) - x) - 
.5f*scale * xywh[4*p+2];
-           float dy = Math.abs((.5f * scale * xywh[4*p+3]) - y) - .5f*scale * 
xywh[4*p+3];
-           if(dbg) p("RequestCoords: "+xywh[4*p+0]+" "+xywh[4*p+1]+" "+
-                                   xywh[4*p+2]+" "+xywh[4*p+3]);
-           float dist = Math.max(dx, dy);
-           if(dist < 0) {
-               psps[p].request(importanceAt, pixelscale);
-           } else if(dist < radius) {
-               if(dbg) p("Request DO: "+dx+" "+dy);
-               psps[p].request(importanceOutside * (1-dist/radius),
-                                pixelscale);
-           }
-           curx += scale * xywh[4*p + 2];
-       }
-    }
 
 }
 
Index: fenfire/org/fenfire/view/pagespanlayout.test
diff -u fenfire/org/fenfire/view/pagespanlayout.test:1.9 
fenfire/org/fenfire/view/pagespanlayout.test:1.10
--- fenfire/org/fenfire/view/pagespanlayout.test:1.9    Fri Jun  6 16:04:33 2003
+++ fenfire/org/fenfire/view/pagespanlayout.test        Tue Jun 24 07:11:52 2003
@@ -77,7 +77,7 @@
        gfx.checkAvgColor(x-2, y-2, 1, 160, (255, 255, 0))
        gfx.checkAvgColor(x-2, y-2, 250, 1, (255, 255, 0))
        gfx.checkAvgColor(x+260, y-2, 1, 160, (255, 255, 0))
-       gfx.checkAvgColor(x-2, y+170, 250, 1, (255, 255, 0))
+       gfx.checkAvgColor(x-2, y+200, 250, 1, (255, 255, 0))
     except:
        excinfo()
        return 0
@@ -95,7 +95,7 @@
     assert s.height == 842
 
 def assertApprox(delta, a, b):
-    assert abs(a-b) < delta
+    assert abs(a-b) < delta, (delta, a, b)
 
 def testSize():
 
@@ -103,8 +103,8 @@
 
     l = fenfire.view.PageSpanLayout(enfMaker.makeEnfilade(sc.getCurrent()))
 
-    assertApprox(.1, l.getWidth(), 2 * 595)
-    assertApprox(.1, l.getHeight(), 842)
+    assertApprox(1, l.getWidth(), 2 * 595 * 75 / 72.)
+    assertApprox(1, l.getHeight(), 842 * 75 / 72.)
 
 def testSimply():
     """Test that the view renders something
@@ -123,13 +123,12 @@
        gfx.checkAvgColor(160,150,50,50, (255, 255, 0), delta=5)
        
 
+       scale = .20833
 
-       scaled = vs.orthoCS(0, "X", 0, 150, 150, .2, .2)
+       scaled = vs.orthoCS(0, "X", 0, 150, 150, scale, scale)
 
        layout = 
fenfire.view.PageSpanLayout(enfMaker.makeEnfilade(sc.getCurrent()))
-       layout.useBg = 0
-       
-       layout.place(vs, scaled, 1, 100000)
+       layout.place(vs, scaled)
 
        gfx.render(vs)
 




reply via email to

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