From 6c9d4258067e846990aa9b817c5b61bd211ee44b Mon Sep 17 00:00:00 2001 From: David Rose Date: Mon, 25 Jun 2001 17:51:07 +0000 Subject: [PATCH] support empty OnscreenPanels --- direct/src/gui/OnscreenPanel.py | 88 ++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 39 deletions(-) diff --git a/direct/src/gui/OnscreenPanel.py b/direct/src/gui/OnscreenPanel.py index 62d4d84664..c5ef9f67a6 100644 --- a/direct/src/gui/OnscreenPanel.py +++ b/direct/src/gui/OnscreenPanel.py @@ -120,7 +120,12 @@ class OnscreenPanel(PandaObject.PandaObject, NodePath): self.panelButtons = [] self.panelText = [] - if isinstance(geom, types.StringType): + if geom == None: + # If 'geom' is None, it means not to have a background + # panel at all. + self.panelGeom = None + + elif isinstance(geom, types.StringType): # If 'geom' is a string, it's the name of a model to load. self.panelGeom = loader.loadModelCopy(geom) self.panelGeom.reparentTo(self) @@ -132,40 +137,42 @@ class OnscreenPanel(PandaObject.PandaObject, NodePath): centerY = (rect[2] + rect[3]) / 2.0 NodePath.setPos(self, centerX, 0, centerY) - # Scale and position the geometry to fill up our desired - # rectangle. - gCenterX = (geomRect[0] + geomRect[1]) / 2.0 - gCenterY = (geomRect[2] + geomRect[3]) / 2.0 - - self.panelGeom.setPos(-gCenterX, 0, -gCenterY) - self.panelGeom.setScale((rect[1] - rect[0]) / (geomRect[1] - geomRect[0]), 1, - (rect[3] - rect[2]) / (geomRect[3] - geomRect[2])) - - if bg[3] != 1: - self.panelGeom.setTransparency(1) - self.panelGeom.setColor(bg[0], bg[1], bg[2], bg[3]) - self.setBin('fixed', self.panelDrawOrder) + self.panelRegion = None - if support3d: - # If we're supposed to support 3-d geometry in front of - # the panel, set a few extra attributes to ensure the - # panel geometry fills up the depth buffer as it goes, - # making it safe to put 3-d geometry in front of it. - dw = DepthWriteTransition() - self.panelGeom.setY(100) - self.panelGeom.arc().setTransition(dw, 2) + if self.panelGeom != None: + # Scale and position the geometry to fill up our desired + # rectangle. + gCenterX = (geomRect[0] + geomRect[1]) / 2.0 + gCenterY = (geomRect[2] + geomRect[3]) / 2.0 - # Set up the panel as its own mouse region so mouse clicks on - # the panel don't inadvertently drive the toon around. This - # must be done after the panelGeom has been scaled - # appropriately, above. - self.geomRect = geomRect - self.panelRegion = MouseWatcherRegion(uniqueName, 0, 0, 0, 0) - self.panelRegion.setRelative(self.panelGeom, - geomRect[0], geomRect[1], - geomRect[2], geomRect[3]) - self.panelRegion.setSort(self.panelDrawOrder) + self.panelGeom.setPos(-gCenterX, 0, -gCenterY) + self.panelGeom.setScale((rect[1] - rect[0]) / (geomRect[1] - geomRect[0]), 1, + (rect[3] - rect[2]) / (geomRect[3] - geomRect[2])) + + if bg[3] != 1: + self.panelGeom.setTransparency(1) + self.panelGeom.setColor(bg[0], bg[1], bg[2], bg[3]) + + if support3d: + # If we're supposed to support 3-d geometry in front of + # the panel, set a few extra attributes to ensure the + # panel geometry fills up the depth buffer as it goes, + # making it safe to put 3-d geometry in front of it. + dw = DepthWriteTransition() + self.panelGeom.setY(100) + self.panelGeom.arc().setTransition(dw, 2) + + # Set up the panel as its own mouse region so mouse clicks on + # the panel don't inadvertently drive the toon around. This + # must be done after the panelGeom has been scaled + # appropriately, above. + self.geomRect = geomRect + self.panelRegion = MouseWatcherRegion(uniqueName, 0, 0, 0, 0) + self.panelRegion.setRelative(self.panelGeom, + geomRect[0], geomRect[1], + geomRect[2], geomRect[3]) + self.panelRegion.setSort(self.panelDrawOrder) def cleanup(self): """cleanup(self): @@ -222,8 +229,9 @@ class OnscreenPanel(PandaObject.PandaObject, NodePath): self.accept(button.button.getDownRolloverEvent(), button.func, [button.button]) button.startBehavior() - - base.mouseWatcherNode.addRegion(self.panelRegion) + + if self.panelRegion != None: + base.mouseWatcherNode.addRegion(self.panelRegion) def hide(self): """hide(self): @@ -242,8 +250,9 @@ class OnscreenPanel(PandaObject.PandaObject, NodePath): self.ignore(button.button.getDownRolloverEvent()) if button.panelManage: button.unmanage() - - base.mouseWatcherNode.removeRegion(self.panelRegion) + + if self.panelRegion != None: + base.mouseWatcherNode.removeRegion(self.panelRegion) def makeButton(self, name, func = None, @@ -397,7 +406,8 @@ class OnscreenPanel(PandaObject.PandaObject, NodePath): button.unmanage() button.manage(self) - self.panelRegion.setRelative(self.panelGeom, - self.geomRect[0], self.geomRect[1], - self.geomRect[2], self.geomRect[3]) + if self.panelRegion != None: + self.panelRegion.setRelative(self.panelGeom, + self.geomRect[0], self.geomRect[1], + self.geomRect[2], self.geomRect[3])