X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/303aff5ed8e0f79dc4e22b7c506a60ca4f7d5225..8bbd1bbf18bfc3ee0363870df5c26f585001c2d8:/wxPython/wx/lib/ogl/_basic.py diff --git a/wxPython/wx/lib/ogl/_basic.py b/wxPython/wx/lib/ogl/_basic.py index bef03241e6..db095dd165 100644 --- a/wxPython/wx/lib/ogl/_basic.py +++ b/wxPython/wx/lib/ogl/_basic.py @@ -19,7 +19,6 @@ from _oglmisc import * DragOffsetX = 0.0 DragOffsetY = 0.0 - def OGLInitialize(): global WhiteBackgroundPen, WhiteBackgroundBrush, TransparentPen global BlackForegroundPen, NormalFont @@ -82,7 +81,11 @@ class ShapeEvtHandler(object): def GetPreviousHandler(self): return self._previousHandler - + + def OnDelete(self): + if self!=self.GetShape(): + del self + def OnDraw(self, dc): if self._previousHandler: self._previousHandler.OnDraw(dc) @@ -229,9 +232,9 @@ class Shape(ShapeEvtHandler): self._canvas = canvas self._xpos = 0.0 self._ypos = 0.0 - self._pen = wx.Pen(wx.BLACK, 1, wx.SOLID) + self._pen = BlackForegroundPen self._brush = wx.WHITE_BRUSH - self._font = wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL) + self._font = NormalFont self._textColour = wx.BLACK self._textColourName = wx.BLACK self._visible = False @@ -273,7 +276,7 @@ class Shape(ShapeEvtHandler): # the region eventually (the duplication is for compatibility) region = ShapeRegion() region.SetName("0") - region.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL)) + region.SetFont(NormalFont) region.SetFormatMode(FORMAT_CENTRE_HORIZ | FORMAT_CENTRE_VERT) region.SetColour("BLACK") self._regions.append(region) @@ -283,20 +286,33 @@ class Shape(ShapeEvtHandler): def GetClassName(self): return str(self.__class__).split(".")[-1][:-2] - - def __del__(self): + + def Delete(self): + """ + Fully disconnect this shape from parents, children, the + canvas, etc. + """ if self._parent: - i = self._parent.GetChildren().index(self) - self._parent.GetChildren(i).remove(self) + self._parent.GetChildren().remove(self) + + for child in self.GetChildren(): + child.Delete() self.ClearText() self.ClearRegions() self.ClearAttachments() + self._handlerShape = None + if self._canvas: - self._canvas.RemoveShape(self) + self.RemoveFromCanvas(self._canvas) - self.GetEventHandler().OnDelete() + if self.GetEventHandler(): + self.GetEventHandler().OnDelete() + self._eventHandler = None + + def __del__(self): + ShapeEvtHandler.__del__(self) def Draggable(self): """TRUE if the shape may be dragged by the user.""" @@ -386,6 +402,10 @@ class Shape(ShapeEvtHandler): else: self._shadowMode = mode + def GetShadowMode(self): + """Return the current shadow mode setting""" + return self._shadowMode + def SetCanvas(self, theCanvas): """Identical to Shape.Attach.""" self._canvas = theCanvas @@ -416,6 +436,8 @@ class Shape(ShapeEvtHandler): """Remove the shape from the canvas.""" if self.Selected(): self.Select(False) + + self._canvas = None theCanvas.RemoveShape(self) for object in self._children: object.RemoveFromCanvas(theCanvas) @@ -633,7 +655,7 @@ class Shape(ShapeEvtHandler): """Get the colour for the specified text region.""" if regionId >= len(self._regions): return "" - return self._regions[regionId].GetTextColour() + return self._regions[regionId].GetColour() def SetRegionName(self, name, regionId = 0): """Set the name for this region. @@ -734,18 +756,18 @@ class Shape(ShapeEvtHandler): if self._pen: dc.SetPen(self._pen) - region = self._regions[0] - if region.GetFont(): - dc.SetFont(region.GetFont()) + for region in self._regions: + if region.GetFont(): + dc.SetFont(region.GetFont()) - dc.SetTextForeground(region.GetActualColourObject()) - dc.SetBackgroundMode(wx.TRANSPARENT) - if not self._formatted: - CentreText(dc, region.GetFormattedText(), self._xpos, self._ypos, bound_x - 2 * self._textMarginX, bound_y - 2 * self._textMarginY, region.GetFormatMode()) - self._formatted = True + dc.SetTextForeground(region.GetActualColourObject()) + dc.SetBackgroundMode(wx.TRANSPARENT) + if not self._formatted: + CentreText(dc, region.GetFormattedText(), self._xpos, self._ypos, bound_x - 2 * self._textMarginX, bound_y - 2 * self._textMarginY, region.GetFormatMode()) + self._formatted = True - if not self.GetDisableLabel(): - DrawFormattedText(dc, region.GetFormattedText(), self._xpos, self._ypos, bound_x - 2 * self._textMarginX, bound_y - 2 * self._textMarginY, region.GetFormatMode()) + if not self.GetDisableLabel(): + DrawFormattedText(dc, region.GetFormattedText(), self._xpos, self._ypos, bound_x - 2 * self._textMarginX, bound_y - 2 * self._textMarginY, region.GetFormatMode()) def DrawContents(self, dc): @@ -1144,7 +1166,7 @@ class Shape(ShapeEvtHandler): """Flash the shape.""" if self.GetCanvas(): dc = wx.ClientDC(self.GetCanvas()) - self.GetCanvas.PrepareDC(dc) + self.GetCanvas().PrepareDC(dc) dc.SetLogicalFunction(OGLRBLF) self.Draw(dc) @@ -1372,13 +1394,13 @@ class Shape(ShapeEvtHandler): Does not redraw the shape. """ - for control in self._controlPoints: + for control in self._controlPoints[:]: if dc: control.GetEventHandler().OnErase(dc) - self._canvas.RemoveShape(control) - del control + control.Delete() + self._controlPoints.remove(control) self._controlPoints = [] - + # Children of divisions are contained objects, # so stop here if not isinstance(self, DivisionShape): @@ -1540,11 +1562,6 @@ class Shape(ShapeEvtHandler): return True return False - # Clears points from a list of wxRealPoints, and clears list - # Useless in python? /pi - def ClearPointList(self, list): - list = [] - # Assuming the attachment lies along a vertical or horizontal line, # calculate the position on that point. def CalcSimpleAttachment(self, pt1, pt2, nth, noArcs, line): @@ -2161,7 +2178,7 @@ class Shape(ShapeEvtHandler): dc.SetLogicalFunction(OGLRBLF) bound_x, bound_y = self.GetBoundingBoxMin() - self.GetEventHandler().OnEndSize(bound_x, bound_y) + self.GetEventHandler().OnBeginSize(bound_x, bound_y) # Choose the 'opposite corner' of the object as the stationary # point in case this is non-centring resizing. @@ -2227,7 +2244,7 @@ class Shape(ShapeEvtHandler): elif pt._type == CONTROL_POINT_VERTICAL: newX1 = pt._controlPointDragStartX newX2 = newX1 + pt._controlPointDragStartWidth - elif pt._type == CONTROL_POINT_DIAGONAL and (keys & KEYS or self.GetMaintainAspectRatio()): + elif pt._type == CONTROL_POINT_DIAGONAL and (keys & KEY_SHIFT or self.GetMaintainAspectRatio()): newH = (newX2 - newX1) * (float(pt._controlPointDragStartHeight) / pt._controlPointDragStartWidth) if pt.GetY() > pt._controlPointDragStartY: newY2 = newY1 + newH @@ -3030,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):