def appendMethodToDrawingMethods(sender, method, drawingMethods):
     if sender.get() == 1:
         if method not in drawingMethods:
             drawingMethods.append(method)
             UpdateCurrentGlyphView()
     else:
         if method in drawingMethods:
             drawingMethods.remove(method)
             UpdateCurrentGlyphView()
示例#2
0
    def font(self, value):
        self._font = value
        self.cfont = ColorFont(self._font)

        self.glyph = None
        self.glyphPreview = None
        self.width = 0
        self.palette_index = 0  # currently active palette

        self.currentPaletteChanged = False
        self.currentGlyphChanged = False

        self.layer_glyphs = []
        self.layer_colors = []
        self.layer_glyphs_glyph_window = []
        self.layer_colors_glyph_window = []

        if self._font is not None:
            self.metrics = (
                self._font.info.descender,
                self._font.info.xHeight,
                self._font.info.capHeight,
                self._font.info.ascender,
                self._font.info.unitsPerEm,
            )
        else:
            self.metrics = (-200, 500, 700, 800, 1000)
        self.scale = 180 / (self.metrics[3] - self.metrics[0])

        # load color data from rfont
        if self._font:
            self.cfont.read_from_rfont()
            self._update_ui()
            UpdateCurrentGlyphView()
示例#3
0
    def _ui_update_palette(self, palette_index):
        # load a different palette from the color font and show it in UI
        # save the currently selected color index
        selectedColorIndex = self.w.colorpalette.getSelection()
        self.palette_index = palette_index
        if self.palette_index < len(self.cfont.palettes):
            colorpalette = self.cfont.palettes[self.palette_index]
        else:
            colorpalette = {}
        int_keys = [int(k) for k in colorpalette.keys()]
        newColorpalette = [{
            "Index": k,
            "Color": self.getNSColor(colorpalette[k])
        } for k in sorted(int_keys)]
        newColorpalette.append({"Index": 0xffff, "Color": self.color})

        self.w.colorpalette.set(newColorpalette)
        self.w.colorpalette.setSelection(selectedColorIndex)
        self.w.paletteswitch.set(self.palette_index)

        self._cache_color_info()
        self._cache_color_info_glyph_window()
        self.currentPaletteChanged = False
        self.w.preview.update()
        UpdateCurrentGlyphView()
示例#4
0
 def windowCloseCallback(self, sender):
     removeObserver(self, "draw")
     removeObserver(self, "drawInactive")
     removeObserver(self, "currentGlyphChanged")
     setExtensionDefault("%s.%s" % (extensionID, "tension"), self.w.HobbySlider.get())
     super(metapolator, self).windowCloseCallback(sender)
     UpdateCurrentGlyphView()
示例#5
0
 def drawRef(self, info):
     save()
     fillColor = NSColor.colorWithCalibratedRed_green_blue_alpha_(0.0, 0.0, 0.0, 1.0)
     fillColor.set()
     self. _drawGlyph(info["glyph"], scale=info["scale"])
     UpdateCurrentGlyphView()
     restore()
示例#6
0
 def drawPreviewRef(self, info):
     save()
     fillColor = NSColor.colorWithCalibratedRed_green_blue_alpha_(0.0, 0.0, 0.0, 0.05)
     fillColor.set()
     self. _drawGlyph(info["glyph"], scale=1, stroke=False)
     UpdateCurrentGlyphView()
     restore()
示例#7
0
    def font_list_drop_callback(self, sender, dropInfo):
        
        for i in self.font_order:
            if i not in self.w.fileList.get():
                self.font_order.remove(i)
                
            
        isProposal = dropInfo["isProposal"]
        
        if not isProposal:
            # get the indexes
            from_index = int(dropInfo["data"][0])
            to_index = dropInfo["rowIndex"]
            
            if to_index != from_index:
                # get the selected object and remove it from the list
                item = self.font_order.pop(from_index)
                
                # fix indexes if the object is moved down the list
                if from_index < to_index:
                    to_index -= 1
                
                # Insert the item at the required index
                self.font_order.insert(to_index, item)
                # update the vanila list
                sender.set(self.font_order)

        UpdateCurrentGlyphView()
        return True
示例#8
0
    def colOnlyCallback(self, sender):
        self.colOnlyCheck = sender.get()

        self.rowOnlyCheck = 0
        self.w.rowOnlyCheck.set(0)

        UpdateCurrentGlyphView()
示例#9
0
 def uncheckGlyphStatus(self, sender):
     self.w.clearGlyphStatusButton.enable(False)
     self.w.showGlyphStatusButton.enable(True)
     self.errors = {}
     self.removeObservers()
     self.drawing = False
     UpdateCurrentGlyphView()
示例#10
0
 def windowCloseCallback(self, sender):
     if self.drawing:
         self.removeObservers()
     if roboFontVersion > "1.5.1":
         _unregisterFactory()
     UpdateCurrentGlyphView()
     super(RedArrowUI, self).windowCloseCallback(sender)
示例#11
0
 def mySliderCallback(self, sender):
     if self.glyph is not None:
         self.glyph.width = sender.get()  # same as self.w.mySlider
         self.updating = True
         self.glyph.changed()
         UpdateCurrentGlyphView()
         self.updating = False
示例#12
0
 def colorStrokeEdit(self, sender):
     color = sender.get()
     if isinstance(color, tuple):
         self.colorStroke = sender.get()
     else:
         self.colorStroke = nsColor2RGB(sender.get())
     UpdateCurrentGlyphView()
示例#13
0
 def txtYCallback(self, sender):
     self.offsetY = 0
     if sender.get() is not None:
         if isfloat(sender.get()):
             self.offsetY = float(sender.get())
     # self.saveCurrentGlyphSettingsAsGlobal()
     UpdateCurrentGlyphView()
示例#14
0
 def _distributeSpacing(self, index, title):
     glyph = CurrentGlyph()
     if glyph is None:
         return
     rects, selectedContours, selectedBPoints = getSelectionData(glyph)
     if len(rects) < 3:
         return
     widths = []
     heights = []
     edgeRect = None
     for rect in rects:
         xMin, yMin, xMax, yMax = rect
         widths.append(xMax - xMin)
         heights.append(yMax - yMin)
         if edgeRect is None:
             edgeRect = rect
         else:
             edgeRect = unionRect(edgeRect, rect)
     objectWidth = sum(widths)
     objectHeight = sum(heights)
     xMin, yMin, xMax, yMax = edgeRect
     overallWidth = xMax - xMin
     overallHeight = yMax - yMin
     availableXSpace = overallWidth - objectWidth
     availableYSpace = overallHeight - objectHeight
     xSpace = availableXSpace / (len(rects) - 1)
     ySpace = availableYSpace / (len(rects) - 1)
     spaceBetweenObjects = (xSpace, ySpace)[index]
     ordered = [(bPoint.anchor[index], (bPoint.anchor[0], bPoint.anchor[1],
                                        bPoint.anchor[0], bPoint.anchor[1]),
                 bPoint) for bPoint in selectedBPoints]
     ordered += [(contour.bounds[index], contour.bounds, contour)
                 for contour in selectedContours]
     ordered.sort()
     glyph.prepareUndo(title)
     prevEdge = None
     for pos, bounds, obj in ordered[:-1]:
         xMin, yMin, xMax, yMax = bounds
         width = xMax - xMin
         height = yMax - yMin
         size = (width, height)[index]
         if prevEdge is None:
             newPos = (xMin, yMin)[index]
         else:
             newPos = prevEdge + spaceBetweenObjects
         d = newPos - pos
         print(d)
         if d != 0:
             if index == 0:
                 obj.moveBy((d, 0))
             else:
                 obj.moveBy((0, d))
         prevEdge = newPos + size
     for bPoint in selectedBPoints:
         bPoint.round()
     for contour in selectedContours:
         contour.round()
     glyph.changed()
     glyph.performUndo()
     UpdateCurrentGlyphView()
 def __init__(self):    
     
     self.w = FloatingWindow((350, 110), "Angle Checker")
     y = 10
     self.w.desiredAngleText = TextBox((10, y, 140, 22), "Desired Angle:", alignment="right")
     self.w.desiredAngle = SliderEditIntStepper((160, y, -10, 22), 15.5, callback=self.changedCallback, minValue=0, maxValue=180)
     
     y += 30
     self.w.toleranceText = TextBox((10, y, 140, 22), "Tolerance +/-:", alignment="right")
     self.w.tolerance = SliderEditIntStepper((160, y, -10, 22), 1, callback=self.changedCallback, minValue=0, maxValue=15)
     
     y += 30
     self.w.rangeToCheckText = TextBox((10, y, 140, 22), "Range to check +/-:", alignment="right")
     self.w.rangeToCheck = SliderEditIntStepper((160, y, -10, 22), 12, callback=self.changedCallback, minValue=0, maxValue=45)
     
     # self.setUpBaseWindowBehavior()
     self.w.open()
     self.w.bind("close", self.windowCloseCallback)
     addObserver(self, "myDrawCallback", "draw")
     addObserver(self, "myDrawCallback", "drawInactive")
     # addObserver(self, "myDrawCallback", "spaceCenterDraw")
     addObserver(self, "myDrawCallback", "viewDidChangeGlyph")
     
     UpdateCurrentGlyphView()
     
     self.g = CurrentGlyph()
示例#16
0
    def _roundCurrentGlyph(self):
        if self.sourceLayerName == self.targetLayerName:
            self.showMessage(
                'ERROR',
                u'source layer name and target layer name should be different')
            return None

        currentGlyph = CurrentGlyph()
        if currentGlyph is not None:
            self.rounderLogger.info(
                'start: _roundCurrentGlyph(), glyph {} from {} {}'.format(
                    currentGlyph.name, self.selectedFont.info.familyName,
                    self.selectedFont.info.styleName))
            selectedFont = currentGlyph.getParent()
            roundingsData = pullRoundingsDataFromFont(selectedFont)

            if roundingsData is not None:
                makeGlyphRound(currentGlyph,
                               roundingsData,
                               sourceLayerName=self.sourceLayerName,
                               targetLayerName=self.targetLayerName)
                UpdateCurrentGlyphView()
                self.rounderLogger.info(
                    'end: _roundCurrentGlyph(), glyph {} from {} {}'.format(
                        currentGlyph.name, selectedFont.info.familyName,
                        selectedFont.info.styleName))
        elif currentGlyph is not None:
            self.showMessage('ERROR', NO_DATA_INTO_FONT)
            self.rounderLogger.error(NO_DATA_INTO_FONT)

        else:
            self.showMessage('ERROR', NO_GLYPH_TO_ROUND)
            self.rounderLogger.error(NO_GLYPH_TO_ROUND)
示例#17
0
 def hideRedArrows(self):
     self.errors = {}
     self.removeObservers()
     if roboFontVersion > "1.5.1":
         _unregisterFactory()
     self.drawing = False
     UpdateCurrentGlyphView()
示例#18
0
    def settingStrokeThicknessFromUI(self, sender):

        try:
            int(str(self.w.strokeThickness.get()))
        except ValueError:
            self.w.strokeThickness.set(str(1))
        UpdateCurrentGlyphView()
 def windowCloseCallback(self, sender):
     removeObserver(self, "draw")
     removeObserver(self, "drawInactive")
     # self.g.removeObserver(self, "Glyph.Changed")
     # removeObserver(self, "spaceCenterDraw")
     removeObserver(self, "viewDidChangeGlyph")
     UpdateCurrentGlyphView()
示例#20
0
    def buildUI(self):
        self.w = FloatingWindow((170, 155), title="Pattern Preview")

        row = 6
        self.w.heightTitle = TextBox((10, row, -10, 17), "Cell Height:")

        row += 20
        self.w.heightRadio = RadioGroup((10, row, -10, 42),
                                        ["Use font UPM", "Use custom height"],
                                        callback=self.heightRadioCallback)
        self.w.heightRadio.set(0)

        self.w.heightInput = EditText((30, row + 45, -10, 22),
                                      text=self.height,
                                      callback=self.heightInputCallback)
        self.w.heightInput.enable(False)

        row += 77
        self.w.rowOnlyCheck = CheckBox((11, row, -10, 22),
                                       "Row only",
                                       callback=self.rowOnlyCallback)

        row += 20
        self.w.colOnlyCheck = CheckBox((11, row, -10, 22),
                                       "Column only",
                                       callback=self.colOnlyCallback)

        addObserver(self, "changeGlyph", "viewDidChangeGlyph")
        addObserver(self, "showPatternBackground", "drawBackground")
        addObserver(self, "showPatternPreview", "drawPreview")

        self.setUpBaseWindowBehavior()
        self.w.open()
        UpdateCurrentGlyphView()
 def windowCloseCallback(self, sender):
     self.removeObservers()
     setExtensionDefault("%s.%s" % (extensionID, "hide"),
                         self.fontAnchors.hideLists)
     setExtensionDefault("%s.%s" % (extensionID, "preview"),
                         self.showPreview)
     super(AnchorOverlay, self).windowCloseCallback(sender)
     UpdateCurrentGlyphView()
示例#22
0
 def mouseMoved(self, info):
     if not self.activDraw: return
     if self.keydidUp == 1: return
     self.mousePt = (info['point'].x, info['point'].y)
     self.pen = ClosestPointPen(self.mousePt, self.g.getParent())
     self.g.draw(self.pen)
     self.closest, self.ortho = self.pen.getClosestData()
     UpdateCurrentGlyphView()
示例#23
0
 def wrapper(self, *args, **kwargs):
     func(self, *args, **kwargs)
     UpdateCurrentGlyphView()
     e = self
     if hasattr(self, 'RCJKI'):
         e = self.RCJKI
     if e.glyphInspectorWindow is not None:
         e.glyphInspectorWindow.updatePreview()
 def windowCloseCallback(self, sender):
     # this receives a notification whenever the window is closed
     # remove the observer
     removeObserver(self, "draw")
     removeObserver(self, "drawInactive")
     # and send the notification to the super
     super(SimpleWindowObserver, self).windowCloseCallback(sender)
     UpdateCurrentGlyphView()
示例#25
0
    def windowCloseCallback(self, sender):
        removeObserver(self, "viewDidChangeGlyph")
        removeObserver(self, "drawBackground")
        removeObserver(self, "drawPreview")

        UpdateCurrentGlyphView()

        super(PatternPreview, self).windowCloseCallback(sender)
示例#26
0
 def drawNeighbors(self, info):
     save()
     fillColor = NSColor.colorWithCalibratedRed_green_blue_alpha_(
         0.0, 0.0, 0.0, 0.05)
     fillColor.set()
     self._drawLeftNeighborsGlyphs(info["glyph"], scale=info["scale"])
     UpdateCurrentGlyphView()
     restore()
示例#27
0
 def checkbox5Callback(self, sender):
     if sender.get() == 1:
         self.w.ten.set(0)
         self.w.sliderInterpol.enable(False)
     if sender.get() == 0:
         if self.w.ten.get() == 0:
             self.w.sliderInterpol.enable(True)
     UpdateCurrentGlyphView()
示例#28
0
def attachLabelToSelectedPoints(labelName):
    myGlyph = CurrentGlyph()
    for eachContour in myGlyph:
        for eachPt in eachContour.points:
            if eachPt.selected is True:
                eachPt.name = labelName
    myGlyph.update()
    UpdateCurrentGlyphView()
 def makePreviewGlyph(self, sender=None):
     if (sender is not None) and isinstance(sender, dict):
         if sender.has_key('notificationName') and sender['notificationName'] == 'mouseDragged':
             g = sender['glyph']
             if not len(g.selection):
                 return
     self.previewGlyph = self.makeCornerGlyph()
     UpdateCurrentGlyphView()
示例#30
0
 def clearLibCallback(self, sender):
     if PLUGIN_KEY in CurrentGlyph().lib:
         del CurrentGlyph().lib[PLUGIN_KEY]
     if version[0] == '2':
         CurrentGlyph().changed()
     else:
         CurrentGlyph().update()
     UpdateCurrentGlyphView()