class GuiTextFrame: def __init__(self, offset, h_size, v_size, numLines, hugpos): self.numLines = numLines #if hugpos == "statusbar": # color = (0,0,0,1) #else: # color = (0.2, 0.2, 0.2, 0.8) color = (0.2, 0.2, 0.2, 0.9) self.frame = DirectFrame( relief = DGG.FLAT , frameColor = color , scale = 1 , frameSize = (0, h_size, 0, -v_size) ) self.v_size = v_size self.hugpos = hugpos self.offset = offset if hugpos == "top": self.frame.reparentTo(base.a2dTopLeft)#@UndefinedVariable self.frame.setPos(self.offset.getX(), 0, self.offset.getZ() - GUI_TOP_OFFSET) elif hugpos == "bottom": self.frame.reparentTo(base.a2dBottomLeft)#@UndefinedVariable self.frame.setPos(self.offset.getX(), 0, self.offset.getZ() + GUI_BOTTOM_OFFSET -0.085) elif hugpos == "statusbar": self.frame.reparentTo(base.a2dTopLeft)#@UndefinedVariable self.frame.setPos(self.offset.getX(), 0, self.offset.getZ()) fixedWidthFont = loader.loadFont(GUI_FONT)#@UndefinedVariable if not fixedWidthFont.isValid(): print "pandaInteractiveConsole.py :: could not load the defined font %s" % str(self.font) fixedWidthFont = DGG.getDefaultFont() if numLines == 1: self.lineHeight = 0.05 else: self.lineHeight = v_size*0.9 / numLines # output lines self.frameOutputList = list() for i in xrange( self.numLines ): label = OnscreenText( parent = self.frame , text = "" , pos = (0.005, -(i+1)*self.lineHeight) , align=TextNode.ALeft , mayChange=1 , scale=0.04 , fg = (1,1,1,1) , shadow = (0, 0, 0, 1)) #, frame = (200,0,0,1) ) label.setFont( fixedWidthFont ) self.frameOutputList.append( label ) def write(self, lineNumber, text): if lineNumber > self.numLines: return self.frameOutputList[lineNumber - 1].setText(text) def redraw(self, aspect): if self.hugpos == "top": p = base.a2dTopLeft.getPos()#@UndefinedVariable p.setX(p.getX() + self.offset.getX() + 0.05) p.setZ(p.getZ() + self.offset.getZ() - GUI_TOP_OFFSET - 0.05) self.frame.setPos(p) elif self.hugpos == "bottom": p = base.a2dBottomLeft.getPos()#@UndefinedVariable p.setX(p.getX() + self.offset.getX() + 0.05) p.setZ(p.getZ() + self.offset.getZ() + GUI_BOTTOM_OFFSET - 0.05) self.frame.setPos(p) elif self.hugpos == "statusbar": self.frame["frameSize"] = (0, 2*aspect, 0, -self.v_size) self.frame.resetFrameSize()