1 |
from __future__ import nested_scopes |
from __future__ import nested_scopes |
|
from gzz.gfx.gl import GZZGL,GLSpans,Paper |
|
|
import gzz |
|
|
|
|
2 |
# Now, this is the start of the REAL demo, the one |
# Now, this is the start of the REAL demo, the one |
3 |
# with Xanadu links between PDF and text. |
# with Xanadu links between PDF and text. |
4 |
|
|
5 |
screensize = (1024, 768) # assuming XGA projector. |
screensize = (1024, 768) # assuming XGA projector. |
6 |
|
|
7 |
pages = gzz.media.impl.PageImageScroll(None, gzz.mediaserver.Mediaserver.Id( |
from gzz.gfx.gl import GZZGL,GLSpans,Paper |
8 |
"0000000008000000E9573F43E00004CB42D4BEFEBAA27C20403F7D57693141B9E4D9A46329AC9C")) |
import gzz |
9 |
|
from test.tools import tools |
10 |
|
execfile("gfx/libutil/effects.py") |
11 |
|
|
12 |
|
space = gzz.impl.ModularSpace(*tools.spaceArgList()) |
13 |
|
xuindexer = gzz.index.impl.TransientXuIndexer() |
14 |
|
enfMaker = gzz.media.impl.Enfilade1DImpl.Enfilade1DImplMaker() |
15 |
|
|
16 |
|
# A PDF file |
17 |
|
pagescroll1 = gzz.media.impl.PageImageScroll(None, |
18 |
|
gzz.mediaserver.Mediaserver.Id( |
19 |
|
"0000000008000000E9573F43E00004CB42D4BEFEBAA27C20403F7D57693141B9E4D9A46329AC9C")) |
20 |
|
|
21 |
|
# A second one |
22 |
|
pagescroll2 = gzz.media.impl.PageImageScroll(None, |
23 |
|
gzz.mediaserver.Mediaserver.Id( |
24 |
|
"0000000008000000E9573F40460004592C0AC2038D1250E0ED08F865D8C9148654B87A7AA82CC6")) |
25 |
|
|
26 |
|
d1cell = space.N() |
27 |
|
d1 = space.getDim(d1cell) |
28 |
|
|
29 |
|
# Two cells, with one PDF span in each |
30 |
|
home = space.getHomeCell() |
31 |
|
c1 = home.N(d1) |
32 |
|
c2 = c1.N(d1) |
33 |
|
|
34 |
|
space.cellTexter.setEnfilade(c1, enfMaker.makeEnfilade(pagescroll1.getCurrent())) |
35 |
|
space.cellTexter.setEnfilade(c2, enfMaker.makeEnfilade(pagescroll2.getCurrent())) |
36 |
|
|
37 |
|
globalcursor = None |
38 |
|
|
39 |
|
# Paper coordinates of current focus |
40 |
|
globalx = 0 |
41 |
|
globaly = 0 |
42 |
|
|
43 |
|
def moveToCell(cell): |
44 |
|
global globalcursor, globalx, globaly, globalpap |
45 |
|
|
46 |
|
content = space.cellTexter.getEnfilade(cell, None) |
47 |
|
|
48 |
prect = [ |
# Check type |
49 |
GLSpans.getRect(pages.getCurrent().subSpan(i,i+1)) |
if 1: # PDF |
50 |
for i in range(0,pages.getCurrent().length())] |
list = content.getList() |
51 |
|
print list |
52 |
|
content = list[0] |
53 |
|
prect = [ |
54 |
|
GLSpans.getRect(content.subSpan(i,i+1)) |
55 |
|
for i in range(0,content.length())] |
56 |
|
globalpap = [ |
57 |
|
pdfpaper(p) for p in prect |
58 |
|
] |
59 |
|
|
60 |
|
AbstractUpdateManager.chg() |
61 |
|
|
62 |
|
|
63 |
|
def globalkey(key): |
64 |
|
if key == '1': |
65 |
|
moveToCell(c1) |
66 |
|
if key == '2': |
67 |
|
moveToCell(c2) |
68 |
|
|
69 |
def pdfpaper(pdfrect): |
def pdfpaper(pdfrect): |
70 |
# Papercoords: (0,0) .. (w,h) where |
# Papercoords: (0,0) .. (w,h) where |
109 |
0, 0, 0, 1]) |
0, 0, 0, 1]) |
110 |
return (pap, pw, ph) |
return (pap, pw, ph) |
111 |
|
|
|
globalpap = [ |
|
|
pdfpaper(p) for p in prect |
|
|
] |
|
|
|
|
112 |
def placepapers(vs, cs2, papers, key, x, y, paperx, papery, h, onlypages=None): |
def placepapers(vs, cs2, papers, key, x, y, paperx, papery, h, onlypages=None): |
113 |
# The height in coords |
# The height in coords |
114 |
ph = papers[0][2] |
ph = papers[0][2] |
123 |
papers[i][0], 0, 0, papers[i][1], papers[i][2], 21, 21) |
papers[i][0], 0, 0, papers[i][1], papers[i][2], 21, 21) |
124 |
vs.map.put(pq, cs1, cs2) |
vs.map.put(pq, cs1, cs2) |
125 |
curx += 1.02 * h/ph * papers[i][1] |
curx += 1.02 * h/ph * papers[i][1] |
|
|
|
|
# Paper coordinates of current focus |
|
|
globalx = 0 |
|
|
globaly = 0 |
|
126 |
|
|
127 |
def bg(vs): |
def bg(vs): |
128 |
putnoc(vs, background((0.3,0.5,0.4))) |
putnoc(vs, background((0.3,0.5,0.4))) |
142 |
class XuPDFScene_PDFContext: |
class XuPDFScene_PDFContext: |
143 |
def __init__(self): |
def __init__(self): |
144 |
self.yheight = 50 |
self.yheight = 50 |
145 |
|
self.ctrx = screensize[0]/2 |
146 |
|
self.ctry = screensize[1]/2 |
147 |
|
self.rad = screensize[1]/2 |
148 |
|
self.nadir = NadirAngler(self.ctrx, screensize[1]*2) |
149 |
def key(self, key): |
def key(self, key): |
150 |
global currentScene |
global currentScene |
151 |
if key == 'z': |
if key == 'z': |
160 |
AbstractUpdateManager.chg() |
AbstractUpdateManager.chg() |
161 |
def scene(self, vs): |
def scene(self, vs): |
162 |
bg(vs) |
bg(vs) |
163 |
|
self.bf = NadirCircleFloater(vs, (self.ctrx, self.ctry), self.rad, |
164 |
|
(self.ctrx+1.5*self.rad, self.ctry), self.nadir) |
165 |
print "Context" |
print "Context" |
166 |
cs2 = vs.coords.affineCoordsys(0, "2", -3, |
cs2 = vs.coords.affineCoordsys(0, "2", -3, |
167 |
screensize[0]/2, 0.9 * screensize[1]/2, 50, 0,0,50) |
screensize[0]/2, 0.9 * screensize[1]/2, 50, 0,0,50) |
199 |
768) |
768) |
200 |
|
|
201 |
currentScene = XuPDFScene_PDFZoom() |
currentScene = XuPDFScene_PDFZoom() |
202 |
|
moveToCell(c1) |
203 |
|
|