From a4d06505c2bc8f6f2b7a5eaf3b7fbef7606a0930 Mon Sep 17 00:00:00 2001 From: David Rose Date: Wed, 31 Aug 2005 13:51:39 +0000 Subject: [PATCH] generalize image parameter --- direct/src/gui/DirectFrame.py | 6 +-- direct/src/gui/OnscreenImage.py | 74 ++++++++++++++++----------------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/direct/src/gui/DirectFrame.py b/direct/src/gui/DirectFrame.py index b75e42bb9c..82003dad0e 100644 --- a/direct/src/gui/DirectFrame.py +++ b/direct/src/gui/DirectFrame.py @@ -123,9 +123,9 @@ class DirectFrame(DirectGuiWidget): if arg == None: # Passed in None imageList = (None,) * self['numStates'] - elif isinstance(arg, NodePath): - imageList = (arg,) * self['numStates'] - elif isinstance(arg, types.StringTypes): + elif isinstance(arg, NodePath) or \ + isinstance(arg, Texture) or \ + isinstance(arg, types.StringTypes): # Passed in a single node path, make a tuple out of it imageList = (arg,) * self['numStates'] else: diff --git a/direct/src/gui/OnscreenImage.py b/direct/src/gui/OnscreenImage.py index fd33ad32f6..e61dbc4f84 100644 --- a/direct/src/gui/OnscreenImage.py +++ b/direct/src/gui/OnscreenImage.py @@ -40,34 +40,10 @@ class OnscreenImage(PandaObject, NodePath): """ # We ARE a node path. Initially, we're an empty node path. NodePath.__init__(self) + if parent == None: parent = aspect2d - # Assign geometry - self.sort = sort - if isinstance(image, NodePath): - self.assign(image.copyTo(parent, sort)) - elif type(image) == type(''): - # Assume its a file name and create a texture card - tex = loader.loadTexture(image) - cm = CardMaker('OnscreenImage') - cm.setFrame(-1, 1, -1, 1) - self.assign(parent.attachNewNode(cm.generate(), sort)) - self.setTexture(tex) - elif type(image) == type(()): - # Assume its a file+node name, extract texture from node - model = loader.loadModelOnce(image[0]) - if model: - node = model.find(image[1]) - if node: - #print 'assigning' - self.assign(node.copyTo(parent, sort)) - else: - print 'OnscreenImage: node %s not found' % image[1] - return - model.removeNode() - else: - print 'OnscreenImage: model %s not found' % image[0] - return + self.setImage(image, parent = parent, sort = sort) # Adjust pose # Set pos @@ -97,24 +73,48 @@ class OnscreenImage(PandaObject, NodePath): # Set color, if specified self.setColor(color[0], color[1], color[2], color[3]) - def setImage(self, image): - parent = self.getParent() - # Assign geometry + def setImage(self, image, + parent = NodePath(), + transform = TransformState.makeIdentity(), + sort = 0): + # Get the original parent, transform, and sort, if any, so we can + # preserve them across this call. + if not self.isEmpty(): + parent = self.getParent() + transform = self.getTransform() + sort = self.getSort() + self.removeNode() + + # Assign geometry if isinstance(image, NodePath): - self.assign(image.copyTo(parent)) - elif type(image) == type(''): - # Assume its a file name and create a texture card - tex = loader.loadTexture(image) + self.assign(image.copyTo(parent, sort)) + elif isinstance(image, types.StringTypes) or \ + isinstance(image, Texture): + if isinstance(image, Texture): + # It's a Texture + tex = image + else: + # It's a Texture file name + tex = loader.loadTexture(image) cm = CardMaker('OnscreenImage') cm.setFrame(-1, 1, -1, 1) - self.assign(parent.attachNewNode(cm.generate(), self.sort)) + self.assign(parent.attachNewNode(cm.generate(), sort)) self.setTexture(tex) elif type(image) == type(()): + # Assume its a file+node name, extract texture from node model = loader.loadModelOnce(image[0]) - self.assign(model.find(image[1])) - self.reparentTo(parent) - model.removeNode() + if model: + node = model.find(image[1]) + if node: + self.assign(node.copyTo(parent, sort)) + else: + print 'OnscreenImage: node %s not found' % image[1] + else: + print 'OnscreenImage: model %s not found' % image[0] + + if not self.isEmpty(): + self.setTransform(transform) def getImage(self): return self