summaryrefslogtreecommitdiffstats
path: root/Demo/sgi/gl/glstdwin/glstdwdraw.py
diff options
context:
space:
mode:
Diffstat (limited to 'Demo/sgi/gl/glstdwin/glstdwdraw.py')
-rw-r--r--Demo/sgi/gl/glstdwin/glstdwdraw.py135
1 files changed, 135 insertions, 0 deletions
diff --git a/Demo/sgi/gl/glstdwin/glstdwdraw.py b/Demo/sgi/gl/glstdwin/glstdwdraw.py
new file mode 100644
index 0000000..0092065
--- /dev/null
+++ b/Demo/sgi/gl/glstdwin/glstdwdraw.py
@@ -0,0 +1,135 @@
+# Define drawing operations for GL stdwin
+
+import gl
+import fm
+from GL import LO_XOR, LO_SRC
+from glstdwin import MASK
+
+class DrawingObject:
+ #
+ def _init(self, win):
+ self.fg = win._fg
+ self.bg = win._bg
+ self.font = win._font
+ self.size = win._size
+ self.width, self.height = win._area[1]
+ gl.winset(win._gid)
+ gl.color(self.fg)
+ return self
+ #
+ def setfont(self, fontname):
+ self.font = fm.findfont(fontname).scalefont(self.size)
+ #
+ def setsize(self, size):
+ ratio = float(size) / float(self.size)
+ self.size = size
+ self.font = self.font.scalefont(ratio)
+ #
+ def setfgcolor(self, color):
+ self.fg = color
+ gl.color(self.fg)
+ #
+ def setbgcolor(self, color):
+ self.bg = color
+ #
+ def cliprect(self, area):
+ #print 'cliprect', area
+ (left, top), (right, bottom) = area
+ gl.scrmask(left, right, self.height-bottom, self.height-top)
+ #
+ def noclip(self):
+ #print 'noclip()'
+ gl.scrmask(0, self.width, 0, self.height)
+ #
+ def paint(self, ((left, top), (right, bottom))):
+ gl.rectf(left, top, right, bottom)
+ #
+ def box(self, ((left, top), (right, bottom))):
+ #print 'box', ((left, top), (right, bottom))
+ gl.rect(left, top, right, bottom)
+ #
+ def circle(self, ((h, v), radius)):
+ gl.circ(h, v, radius)
+ #
+ def elarc(self, (center, (rh, rv), a1, a2)):
+ pass # XXX
+ #
+ def erase(self, ((left, top), (right, bottom))):
+ #print 'erase', ((left, top), (right, bottom))
+ gl.color(self.bg)
+ gl.rectf(left, top, right, bottom)
+ gl.color(self.fg)
+ #
+ def invert(self, ((left, top), (right, bottom))):
+ #print 'invert', ((h0, v0), (h1, v1))
+ gl.logicop(LO_XOR)
+ gl.color(self.bg)
+ gl.rectf(left, top, right, bottom)
+ gl.color(self.fg)
+ gl.logicop(LO_SRC)
+ #
+ def line(self, ((h0, v0), (h1, v1))):
+ #print 'line', ((h0, v0), (h1, v1))
+ gl.bgnline()
+ gl.v2i(h0, v0)
+ gl.v2i(h1, v1)
+ gl.endline()
+ #
+ def xorline(self, ((h0, v0), (h1, v1))):
+ #print 'xorline', ((h0, v0), (h1, v1))
+ gl.logicop(LO_XOR)
+ gl.color(self.bg)
+ gl.bgnline()
+ gl.v2i(h0, v0)
+ gl.v2i(h1, v1)
+ gl.endline()
+ gl.color(self.fg)
+ gl.logicop(LO_SRC)
+ #
+ def point(self, (h, v)):
+ #print 'point', (h, v)
+ gl.bgnpoint()
+ gl.v2i(h, v)
+ gl.endpoint()
+ #
+ def text(self, ((h, v), string)):
+ #print 'text', ((h, v), string)
+ if h < 0:
+ # If the point is outside the window
+ # the whole string isn't drawn.
+ # Skip the beginning of the string.
+ # XXX What if the font is bigger than 20 pixels?
+ i, n = 0, len(string)
+ while h < -MASK and i < n:
+ h = h + self.font.getstrwidth(string[i])
+ i = i + 1
+ string = string[i:]
+ gl.cmov2(h, v + self.baseline())
+ self.font.setfont()
+ fm.prstr(string)
+ #
+ def shade(self, ((h, v), percent)):
+ pass # XXX
+ #
+ def baseline(self):
+ (printermatched, fixed_width, xorig, yorig, xsize, ysize, \
+ height, nglyphs) = self.font.getfontinfo()
+ return height - yorig
+ #
+ def lineheight(self):
+ (printermatched, fixed_width, xorig, yorig, xsize, ysize, \
+ height, nglyphs) = self.font.getfontinfo()
+ return height
+ #
+ def textbreak(self, (string, width)):
+ # XXX Slooooow!
+ n = len(string)
+ nwidth = self.textwidth(string[:n])
+ while nwidth > width:
+ n = n-1
+ nwidth = self.textwidth(string[:n])
+ return n
+ #
+ def textwidth(self, string):
+ return self.font.getstrwidth(string)
+ #