mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
Initial revision
This commit is contained in:
parent
6da6aebfdb
commit
453bd408bd
18 changed files with 2990 additions and 0 deletions
139
Demo/sgi/gl/glstdwin/glstdwwin.py
Normal file
139
Demo/sgi/gl/glstdwin/glstdwwin.py
Normal file
|
|
@ -0,0 +1,139 @@
|
|||
# Define window operations for STDWIN
|
||||
|
||||
import gl
|
||||
from stdwinevents import *
|
||||
from glstdwin import G # Global variables
|
||||
from glstdwin import MASK # Tunable constant
|
||||
|
||||
class WindowObject:
|
||||
#
|
||||
def _init(self, title):
|
||||
self._docsize = (0, 0)
|
||||
self._fg = G.fg
|
||||
self._bg = G.bg
|
||||
self._title = title
|
||||
self._font = G.font
|
||||
self._size = G.size
|
||||
self._menus = []
|
||||
self._gid = gl.winopen(title)
|
||||
gl.winconstraints() # To remove prefsize() effect
|
||||
self._fixviewport()
|
||||
self._needredraw()
|
||||
return self
|
||||
#
|
||||
def close(self):
|
||||
del G.windowmap[`self._gid`]
|
||||
gl.winclose(self._gid)
|
||||
self._gid = 0
|
||||
#
|
||||
def _needredraw(self):
|
||||
if self in G.drawqueue:
|
||||
G.drawqueue.remove(self)
|
||||
G.drawqueue.append(self)
|
||||
#
|
||||
def begindrawing(self):
|
||||
from glstdwdraw import DrawingObject
|
||||
return DrawingObject()._init(self)
|
||||
#
|
||||
def change(self, area):
|
||||
self._needredraw()
|
||||
# XXX Should record the area to be drawn?
|
||||
#
|
||||
def gettitle(self):
|
||||
return self._title
|
||||
#
|
||||
def getdocsize(self):
|
||||
return self._docsize
|
||||
#
|
||||
def getorigin(self):
|
||||
return self._area[0]
|
||||
#
|
||||
def getwinsize(self):
|
||||
return self._area[1]
|
||||
#
|
||||
def scroll(self, (area, by)):
|
||||
# XXX ought to use gl.rectcopy()
|
||||
if by <> (0, 0):
|
||||
self.change(area)
|
||||
#
|
||||
def setdocsize(self, docsize):
|
||||
self._docsize = docsize
|
||||
#
|
||||
def setorigin(self, origin):
|
||||
pass # XXX
|
||||
#
|
||||
def settimer(self, decisecs):
|
||||
pass # XXX
|
||||
#
|
||||
def settitle(self, title):
|
||||
self._title = title
|
||||
gl.wintitle(title)
|
||||
#
|
||||
def show(self, area):
|
||||
pass # XXX
|
||||
#
|
||||
def _fixviewport(self):
|
||||
#
|
||||
# Called after redraw or resize, and initially.
|
||||
#
|
||||
# Fix the coordinate system so that (0, 0) is top left,
|
||||
# units are pixels, and positive axes point right and down.
|
||||
#
|
||||
# Make the viewport slightly larger than the window,
|
||||
# and set the screenmask exactly to the window; this
|
||||
# help fixing character clipping.
|
||||
#
|
||||
# Set self._area to the window rectangle in STDWIN coords.
|
||||
#
|
||||
gl.winset(self._gid)
|
||||
gl.reshapeviewport()
|
||||
x0, x1, y0, y1 = gl.getviewport()
|
||||
width, height = x1-x0, y1-y0
|
||||
gl.viewport(x0-MASK, x1+MASK, y0-MASK, y1+MASK)
|
||||
gl.scrmask(x0, x1, y0, y1)
|
||||
gl.ortho2(-MASK, width+MASK, height+MASK, -MASK)
|
||||
self._area = (0, 0), (width, height)
|
||||
#
|
||||
def menucreate(self, title):
|
||||
from glstdwmenu import MenuObject
|
||||
menu = MenuObject()._init(self, title)
|
||||
self._menus.append(menu)
|
||||
return menu
|
||||
#
|
||||
def _domenu(self):
|
||||
if not self._menus:
|
||||
return None
|
||||
if len(self._menus) == 1:
|
||||
pup = self._menus[0]._makepup(0)
|
||||
val = gl.dopup(pup)
|
||||
gl.freepup(pup)
|
||||
if val < 0:
|
||||
return None
|
||||
return WE_MENU, self, (self._menus[0], val)
|
||||
#
|
||||
# More than one menu: use nested menus.
|
||||
#
|
||||
pups = []
|
||||
firstitem = 0
|
||||
for menu in self._menus:
|
||||
pups.append(menu._makepup(firstitem))
|
||||
firstitem = firstitem + 100
|
||||
pup = gl.newpup()
|
||||
for i in range(len(self._menus)):
|
||||
gl.addtopup(pup, self._menus[i]._title + '%m', pups[i])
|
||||
val = gl.dopup(pup)
|
||||
gl.freepup(pup)
|
||||
for pup in pups:
|
||||
gl.freepup(pup)
|
||||
if val < 0:
|
||||
return None
|
||||
i_menu, i_item = divmod(val, 100)
|
||||
return WE_MENU, self, (self._menus[i_menu], i_item)
|
||||
#
|
||||
def _doshortcut(self, char):
|
||||
for menu in self._menus:
|
||||
i = menu._checkshortcut(char)
|
||||
if i >= 0:
|
||||
return WE_MENU, self, (menu, i)
|
||||
return None
|
||||
#
|
||||
Loading…
Add table
Add a link
Reference in a new issue