mirror of
https://github.com/python/cpython.git
synced 2025-07-30 14:44:10 +00:00
Initial revision
This commit is contained in:
parent
6da6aebfdb
commit
453bd408bd
18 changed files with 2990 additions and 0 deletions
135
Demo/sgi/gl/glstdwin/glstdwdraw.py
Normal file
135
Demo/sgi/gl/glstdwin/glstdwdraw.py
Normal file
|
@ -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)
|
||||
#
|
Loading…
Add table
Add a link
Reference in a new issue