Example #1
0
 def becomeActive(self):
     if DEBUG:
         print "becomeActive"
     self.ui = RedArrowUI()
     self.ui.fixer = self
Example #2
0
 def becomeActive(self):
     if DEBUG:
         print("becomeActive")
     self.ui = RedArrowUI()
     self.ui.fixer = self
Example #3
0
class RedArrowFixerTool(BaseEventTool):
    
    def setup(self):
        self.errorSelection = ErrorSelection()
        self.pStart = None
        self.pEnd = None
        self._selectedMouseDownPoint = None
    
    def getToolbarIcon(self):
        return toolbarIcon
    
    def getToolbarTip(self):
        return "Red Arrow Fixer"
    
    def becomeActive(self):
        if DEBUG:
            print "becomeActive"
        self.ui = RedArrowUI()
        self.ui.fixer = self
    
    def becomeInactive(self):
        if DEBUG:
            print "becomeInactive"
        self.ui.windowCloseCallback(None)
        self.ui.w.close()
    
    def fixSelected(self):
        if DEBUG:
            print "fixSelected"
        # Add an anchor at position p
        g = CurrentGlyph()
        #g.prepareUndo(undoTitle="Add anchor %s to /%s" % (newAnchorName, g.name))
        # TODO Fix problems
        #g.performUndo()
    
    def _normalizeBox(self, p0, p1):
        # normalize selection rectangle so it is always positive
        return (min(p0.x, p1.x), min(p0.y, p1.y), max(p0.x, p1.x), max(p0.y, p1.y))
    
    def _getSelectedPoints(self):
        if self.pStart and self.pEnd:
            box = self._normalizeBox(self.pStart, self.pEnd)
            for error in self.ui.errors:
                p = error.position
                if pointInRect(p, box):
                    self.errorSelection.addError(p, self.shiftDown)
                    self._selectedMouseDownPoint = p
    
    def mouseDown(self, point, clickCount):
        if not(self.shiftDown):
            self.errorSelection.resetSelection()
        if clickCount > 1:
            #self._newAnchor(point)
            pass
        else:
            self.pStart = point
            self.pEnd = None
            s = self._view.getGlyphViewOnCurvePointsSize(minSize=7)
            for error in self.ui.errors:
                p = error.position
                if bezierTools.distanceFromPointToPoint(p, point) < s:
                    self.errorSelection.addError(p, self.shiftDown)
                    self._selectedMouseDownPoint = p
                    break
    
    def mouseUp(self, point):
        self.pEnd = point
        self._getSelectedPoints()
        #print self.errorSelection
        self.pStart = None
        self.pEnd = None
        self._selectedMouseDownPoint = None
    
    def mouseDragged(self, point, delta):
        self.pEnd = point
        #self._getSelectedPoints()
    
    def draw(self, scale):
        if self.isDragging() and self.pStart and self.pEnd:
            r = self.getMarqueRect()
            if r:
                color = getDefaultColor('glyphViewSelectionMarqueColor')
                color.set()
                path = NSBezierPath.bezierPathWithRect_(r)
                path.fill()
            return
        self.drawSelection(scale)
    
    def drawSelection(self, scale):
        self.errorSelection.draw(scale)
Example #4
0
class RedArrowFixerTool(BaseEventTool):
    def setup(self):
        self.errorSelection = ErrorSelection()
        self.pStart = None
        self.pEnd = None
        self._selectedMouseDownPoint = None

    def getToolbarIcon(self):
        return toolbarIcon

    def getToolbarTip(self):
        return "Red Arrow Fixer"

    def becomeActive(self):
        if DEBUG:
            print("becomeActive")
        self.ui = RedArrowUI()
        self.ui.fixer = self

    def becomeInactive(self):
        if DEBUG:
            print("becomeInactive")
        self.ui.windowCloseCallback(None)
        self.ui.w.close()

    def fixSelected(self):
        if DEBUG:
            print("fixSelected")
        # Add an anchor at position p
        g = CurrentGlyph()
        #g.prepareUndo(undoTitle="Add anchor %s to /%s" % (newAnchorName, g.name))
        # TODO Fix problems
        #g.performUndo()

    def _normalizeBox(self, p0, p1):
        # normalize selection rectangle so it is always positive
        return (min(p0.x, p1.x), min(p0.y, p1.y), max(p0.x,
                                                      p1.x), max(p0.y, p1.y))

    def _getSelectedPoints(self):
        if self.pStart and self.pEnd:
            box = self._normalizeBox(self.pStart, self.pEnd)
            for error in self.ui.errors:
                p = error.position
                if pointInRect(p, box):
                    self.errorSelection.addError(p, self.shiftDown)
                    self._selectedMouseDownPoint = p

    def mouseDown(self, point, clickCount):
        if not (self.shiftDown):
            self.errorSelection.resetSelection()
        if clickCount > 1:
            #self._newAnchor(point)
            pass
        else:
            self.pStart = point
            self.pEnd = None
            s = self._view.getGlyphViewOnCurvePointsSize(minSize=7)
            for error in self.ui.errors:
                p = error.position
                if bezierTools.distanceFromPointToPoint(p, point) < s:
                    self.errorSelection.addError(p, self.shiftDown)
                    self._selectedMouseDownPoint = p
                    break

    def mouseUp(self, point):
        self.pEnd = point
        self._getSelectedPoints()
        #print(self.errorSelection)
        self.pStart = None
        self.pEnd = None
        self._selectedMouseDownPoint = None

    def mouseDragged(self, point, delta):
        self.pEnd = point
        #self._getSelectedPoints()

    def draw(self, scale):
        if self.isDragging() and self.pStart and self.pEnd:
            r = self.getMarqueRect()
            if r:
                color = getDefaultColor('glyphViewSelectionMarqueColor')
                color.set()
                path = NSBezierPath.bezierPathWithRect_(r)
                path.fill()
            return
        self.drawSelection(scale)

    def drawSelection(self, scale):
        self.errorSelection.draw(scale)