From: Robin Dunn Date: Fri, 3 Feb 2006 06:51:34 +0000 (+0000) Subject: Better cleanup of circular references. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/ab552aa4d7f70363c6a3c6dd5b26d144c23b271c Better cleanup of circular references. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37267 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/wxPython/wx/lib/ogl/_basic.py b/wxPython/wx/lib/ogl/_basic.py index 441862b7d0..757c5c2115 100644 --- a/wxPython/wx/lib/ogl/_basic.py +++ b/wxPython/wx/lib/ogl/_basic.py @@ -288,9 +288,16 @@ class Shape(ShapeEvtHandler): return str(self.__class__).split(".")[-1][:-2] def Delete(self): + """ + Fully disconnect this shape from parents, children, the + canvas, etc. + """ if self._parent: self._parent.GetChildren().remove(self) + for child in self.GetChildren(): + child.Delete() + self.ClearText() self.ClearRegions() self.ClearAttachments() @@ -3040,7 +3047,7 @@ class ShapeRegion(object): return None if self._penColour=="Invisible": return None - self._actualPenObject = wx.ThePenList.FindOrCreatePen(self._penColour, 1, self._penStyle) + self._actualPenObject = wx.Pen(self._penColour, 1, self._penStyle) return self._actualPenObject def SetText(self, s): diff --git a/wxPython/wx/lib/ogl/_composit.py b/wxPython/wx/lib/ogl/_composit.py index 812b7539a1..d07c3993a5 100644 --- a/wxPython/wx/lib/ogl/_composit.py +++ b/wxPython/wx/lib/ogl/_composit.py @@ -559,6 +559,18 @@ class CompositeShape(RectangleShape): self.RemoveChildFromConstraints(child) child.SetParent(None) + def Delete(self): + """ + Fully disconnect this shape from parents, children, the + canvas, etc. + """ + for child in self.GetChildren(): + self.RemoveChild(child) + child.Delete() + RectangleShape.Delete(self) + self._constraints = [] + self._divisions = [] + def DeleteConstraintsInvolvingChild(self, child): """This function deletes constraints which mention the given child. diff --git a/wxPython/wx/lib/ogl/_diagram.py b/wxPython/wx/lib/ogl/_diagram.py index 8e8f834724..6bdf00185f 100644 --- a/wxPython/wx/lib/ogl/_diagram.py +++ b/wxPython/wx/lib/ogl/_diagram.py @@ -78,6 +78,7 @@ class Diagram(object): for shape in self._shapeList[:]: if not shape.GetParent(): self.RemoveShape(shape) + shape.Delete() def ShowAll(self, show): """Call Show for each shape in the diagram.""" diff --git a/wxPython/wx/lib/ogl/_drawn.py b/wxPython/wx/lib/ogl/_drawn.py index 222cb08c76..7f2c1d9831 100644 --- a/wxPython/wx/lib/ogl/_drawn.py +++ b/wxPython/wx/lib/ogl/_drawn.py @@ -90,7 +90,7 @@ class OpSetGDI(DrawOp): if self._gdiIndex in self._image._outlineColours: # Need to construct a brush to match the outline pen's colour if self._image._outlinePen: - br = wx.TheBrushList.FindOrCreateBrush(self._image._outlinePen, wx.SOLID) + br = wx.Brush(self._image._outlinePen, wx.SOLID) if br: dc.SetBrush(br) elif self._gdiIndex in self._image._fillColours: diff --git a/wxPython/wx/lib/ogl/_lines.py b/wxPython/wx/lib/ogl/_lines.py index d316630fbb..fdee0ed6b5 100644 --- a/wxPython/wx/lib/ogl/_lines.py +++ b/wxPython/wx/lib/ogl/_lines.py @@ -131,7 +131,7 @@ class LabelShape(RectangleShape): RectangleShape.__init__(self, w, h) self._lineShape = parent self._shapeRegion = region - self.SetPen(wx.ThePenList.FindOrCreatePen(wx.Colour(0, 0, 0), 1, wx.DOT)) + self.SetPen(wx.Pen(wx.Colour(0, 0, 0), 1, wx.DOT)) def OnDraw(self, dc): if self._lineShape and not self._lineShape.GetDrawHandles(): @@ -1027,7 +1027,7 @@ class LineShape(Shape): # Problem with pen - if not a solid pen, does strange things # to the arrowhead. So make (get) a new pen that's solid. if self._pen and self._pen.GetStyle() != wx.SOLID: - solid_pen = wx.ThePenList.FindOrCreatePen(self._pen.GetColour(), 1, wx.SOLID) + solid_pen = wx.Pen(self._pen.GetColour(), 1, wx.SOLID) if solid_pen: dc.SetPen(solid_pen)