[Top][All Lists]
[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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gzz-commits] fenfire/org/fenfire spanimages/SpanImageFactory...,
Tuomas J. Lukka <=