def __init__(self, parentWindow):

        data = getExtensionDefault(self.identifier, dict())
        self.w = Sheet((470, 580), parentWindow=parentWindow)

        self.w.tabs = Tabs((10, 10, -10, -40), ["TTF AutoHint", "HTML Preview"])
        self.w.tabs[0].settings = self.settings = TTFAutoHintGroup((0, 0, -0, -0))
        self.settings.set(data)

        y = 10
        self.w.tabs[1].htmlText = TextBox((10, y, 100, 22), "HTML preview:")
        y += 30
        self.w.tabs[1].html = self.html = CodeEditor((10, y, -10, 250), getExtensionDefault("%s.htmlPreview" % settingsIdentifier, htmlPreviewDefault), lexer="html")
        self.html.showLineNumbers(False)
        y += 260
        self.w.tabs[1].globalCssText = TextBox((10, y, 100, 22), "CSS Style:")
        y += 30
        self.w.tabs[1].globalCss = self.globalCss = CodeEditor((10, y, -10, -10), getExtensionDefault("%s.globalCSSPreview" % settingsIdentifier, ""), lexer="css")
        self.globalCss.showLineNumbers(False)

        self.w.saveButton = Button((-100, -30, -10, 20), "Save settings", callback=self.saveCallback, sizeStyle="small")
        self.w.setDefaultButton(self.w.saveButton)

        self.w.closeButton = Button((-190, -30, -110, 20), "Cancel", callback=self.closeCallback, sizeStyle="small")
        self.w.closeButton.bind(".", ["command"])
        self.w.closeButton.bind(unichr(27), [])

        self.w.resetButton = Button((-280, -30, -200, 20), "Reset", callback=self.resetCallback, sizeStyle="small")
        self.w.open()
    def __init__(self):
        self.w = FloatingWindow((220, 240),  "2 Twitter")

        left = 100
        y = 10
        
        userName = getExtensionDefault("%s.%s" %(defaultKey, "userName"), "")
        password = getExtensionDefault("%s.%s" %(defaultKey, "password"), "")
        
        self.w.userNameText = TextBox((10, y, left, 22), "User name:")
        self.w.userName = EditText((left, y, -10, 22), userName)
        y += 30
        
        self.w.passwordText = TextBox((10, y, left, 22), "Password:"******"Glyph View", "Space Center"]
        self.w.view = RadioGroup((10, y, -10, -40), self._viewNames)
        self.w.view.set(0)     
        
        self.w.okButton = Button((-70, -30, -15, 20), "Post", callback=self.okCallback, sizeStyle="small")
        self.w.setDefaultButton(self.w.okButton)
        
        self.w.closeButton = Button((-140, -30, -80, 20), "Cancel", callback=self.closeCallback, sizeStyle="small")
        self.w.closeButton.bind(".", ["command"])
        self.w.closeButton.bind(unichr(27), [])
        
        self.w.open()
Esempio n. 3
0
	def load(self):
		self.onOff = getExtensionDefault(onOffKey, self._fallbackOnOff)
		self.lineWidth = getExtensionDefault(lineWidthKey, self._fallbackStrokeWidth)
		self.lineColor = getExtensionDefaultColor(lineColorKey, self._fallbackStrokeColor)
		self.fillColor = getExtensionDefaultColor(fillColorKey, self._fallbackFillColor)
		self.lineRGBA = getExtensionDefault(lineRGBA, self._fallbackStrokeRGBA)
		self.fillRGBA = getExtensionDefault(fillRGBA, self._fallbackFillRGBA)
 def __init__(self, constructions, font, parentWindow):
     
     self.font = font
     self.constructions = constructions
     
     self.w = Sheet((300, 120), parentWindow=parentWindow)
     
     getExtensionDefault, setExtensionDefault, getExtensionDefaultColor, setExtensionDefaultColor
     y = 15
     self.w.overWrite = CheckBox((15, y, 200, 22), "Overwrite Existing Glyphs", value=getExtensionDefault(self.overWriteKey, True))
     
     y += 35
     self.w.markGlyphs = CheckBox((15, y, 200, 22), "Mark Glyphs", value=getExtensionDefault(self.overWriteKey, True), callback=self.markGlyphsCallback) 
     self.w.markGlyphColor = ColorWell((130, y-5, 50, 30), color=getExtensionDefaultColor(self.markColorKey, NSColor.redColor()))
     
     self.w.markGlyphColor.enable(getExtensionDefault(self.overWriteKey, True))
             
     self.w.okButton = Button((-70, -30, -15, 20), "Build", callback=self.buildCallback, sizeStyle="small")
     self.w.setDefaultButton(self.w.okButton)
     
     self.w.closeButton = Button((-140, -30, -80, 20), "Cancel", callback=self.closeCallback, sizeStyle="small")
     self.w.closeButton.bind(".", ["command"])
     self.w.closeButton.bind(unichr(27), [])
     
     self.w.open() 
Esempio n. 5
0
    def __init__(self):

        
        addObserver(self, "_curvePreview", "draw")
        addObserver(self, "_curvePreview", "drawInactive")
        addObserver(self, "_currentGlyphChanged", "currentGlyphChanged")
                
        self.methods = {
            0: "fl",
            4: "free",
        }
        
        self.methodNames = [
            "Tension:"
        ]
        
        
        height = 80
        
        self.w = vanilla.FloatingWindow((300, height), "Hobby's Spline")
        
        y = -200
        self.w.hobbyMethodSelector = vanilla.RadioGroup((10, y, -10, 108),
            titles = "Circle",
            callback=self._changeMethod,
            sizeStyle="small"
        )
        
        y = 10
        
        self.w.HobbySlider = Slider((15, y, -15, 25),
            tickMarkCount=4,

            callback=self._changetension,
            minValue=0.5,
            maxValue=1.0,
            sizeStyle="small",
            continuous=True
        )
        
        y = height - 32
        self.w.hobbycurveButton = vanilla.Button((60, y , -60, 25), "transform selected curves",
            callback=self._hobbycurve,
            sizeStyle="small",
        )
        
        self.w.hobbyMethodSelector.set(getExtensionDefault("%s.%s" %(extensionID, "method"), 0))
        self.method = self.methods[self.w.hobbyMethodSelector.get()]
        self._checkSecondarySelectors()
        
        self.w.HobbySlider.set(getExtensionDefault("%s.%s" %(extensionID, "tension"), 0.5))
        self.tension = self.w.HobbySlider.get()
  
        self.tmp_glyph = RGlyph()
        UpdateCurrentGlyphView()
        
        self.setUpBaseWindowBehavior()
        self.w.open()
    def run(self, destDir, progress):
        progress.update("Converting...")

        paths = self.controller.get()

        report = Report()
        report.css = CSSWriter()
        report.html = HTMLWriter(cssFileName="font.css", style=getExtensionDefault("%s.globalCSSPreview" % settingsIdentifier, ""))

        report.writeTitle("Web Fonts:")
        report.newLine()

        saveOTF = self.save_otf.get()
        saveTTF = self.save_ttf.get()
        saveWOFF = self.save_woff.get()
        saveWOFFFormat = self.save_woff_format.get()
        saveWOFF2 = self.save_woff2.get()
        saveWOFF2Format = self.save_woff2_format.get()
        saveEOT = self.save_eot.get()
        saveSVG = self.save_svg.get()
        suffix = self.webSuffix.get()
        suffix = time.strftime(suffix)

        preserveTTFhints = self.preserveTTFhints.get()

        progress.setTickCount(len(paths))

        for path in paths:
            txt = os.path.basename(path)
            progress.update(txt)
            report.writeTitle(os.path.basename(path), "-")
            report.write("source: %s" % path)
            report.newLine()
            try:
                self._convertPath(path, destDir=destDir, saveOTF=saveOTF, saveTTF=saveTTF, saveWOFF=saveWOFF, saveWOFFFormat=saveWOFFFormat, saveWOFF2=saveWOFF2, saveWOFF2Format=saveWOFF2Format, saveEOT=saveEOT, saveSVG=saveSVG, suffix=suffix, report=report, preserveTTFhints=preserveTTFhints)
            except:
                import traceback
                message = traceback.format_exc()
                report.write("Failed:")
                report.write(message)
                report.indent(0)
            report.newLine()

        report.newLine()
        report.writeTitle("TTFAutohint options:")
        autohintOptions = getExtensionDefault(settingsIdentifier, defaultOptions)
        report.writeDict(autohintOptions)

        reportPath = os.path.join(destDir, "WebFonts Report.txt")
        report.save(reportPath)

        if self.generateHTML.get():
            cssPath = os.path.join(destDir, "font.css")
            report.css.save(cssPath)

            htmlPath = os.path.join(destDir, "preview.html")
            report.html.save(htmlPath)
Esempio n. 7
0
    def _end(self):
        removeObserver(getExtensionDefault(selfKey), event)
        removeObserver(getExtensionDefault(selfKey), "currentGlyphChanged")
        removeObserver(getExtensionDefault(selfKey), "drawPreview")
        removeObserver(getExtensionDefault(selfKey), "draw")
        # removeObserver(getExtensionDefault(selfKey), 'drawBackground')

        setExtensionDefault(selfKey, None)
        # this is optional
        if wasOn:
            self._restoreGlyphViewItems()
        # kill settings window
        self.settingsWindow(onOff=False)
Esempio n. 8
0
    def loadExtensions(self, checkForUpdates=False):
        progress = self.startProgress("Loading extensions...")

        wrappedItems = []
        for urlStream in getExtensionDefault("com.mechanic.urlstreams"):
            clss = ExtensionRepository
            if urlStream == extensionStoreDataURL:
                clss = ExtensionStoreItem
            for data in getExtensionData(urlStream):
                try:
                    item = MCExtensionListItem(
                        clss(data, checkForUpdates=checkForUpdates))
                    wrappedItems.append(item)
                except Exception as e:
                    logger.error(
                        "Creating extension item '%s' from url '%s' failed." %
                        (data.get("extensionName", "unknow"), urlStream))
                    logger.error(e)

        for singleExtension in getExtensionDefault(
                "com.mechanic.singleExtensionItems"):
            try:
                item = MCExtensionListItem(
                    ExtensionYamlItem(singleExtension,
                                      checkForUpdates=checkForUpdates))
                wrappedItems.append(item)
            except Exception as e:
                logger.error("Creating single extension item '%s' failed." %
                             singleExtension.get("extensionName", "unknow"))
                logger.error(e)

        progress.update("Setting Extensions...")
        try:
            self.w.extensionList.set(wrappedItems)
        except Exception as e:
            logger.error("Cannot set items in mechanic list.")
            logger.error(e)

        if checkForUpdates:
            progress.update("Checking for updates...")
            progress.setTickCount(len(wrappedItems))
            for item in wrappedItems:
                progress.update()
                item.extensionObject().extensionNeedsUpdate()
            progress.setTickCount(None)
            now = time.time()
            setExtensionDefault("com.mechanic.lastUpdateCheck", now)
            title = time.strftime("Checked at %H:%M", time.localtime(now))
            self.w.checkForUpdates.setTitle(title)
            self._didCheckedForUpdates = True
        progress.close()
Esempio n. 9
0
    def __init__(self, parentWindow):

        data = getExtensionDefault(self.identifier, dict())
        self.w = Sheet((470, 580), parentWindow=parentWindow)

        self.w.tabs = Tabs((10, 10, -10, -40),
                           ["TTF AutoHint", "HTML Preview"])
        self.w.tabs[0].settings = self.settings = TTFAutoHintGroup(
            (0, 0, -0, -0))
        self.settings.set(data)

        y = 10
        self.w.tabs[1].htmlText = TextBox((10, y, 100, 22), "HTML preview:")
        y += 30
        self.w.tabs[1].html = self.html = CodeEditor(
            (10, y, -10, 250),
            getExtensionDefault("%s.htmlPreview" % settingsIdentifier,
                                htmlPreviewDefault),
            lexer="html")
        self.html.showLineNumbers(False)
        y += 260
        self.w.tabs[1].globalCssText = TextBox((10, y, 100, 22), "CSS Style:")
        y += 30
        self.w.tabs[1].globalCss = self.globalCss = CodeEditor(
            (10, y, -10, -10),
            getExtensionDefault("%s.globalCSSPreview" % settingsIdentifier,
                                ""),
            lexer="css")
        self.globalCss.showLineNumbers(False)

        self.w.saveButton = Button((-100, -30, -10, 20),
                                   "Save settings",
                                   callback=self.saveCallback,
                                   sizeStyle="small")
        self.w.setDefaultButton(self.w.saveButton)

        self.w.closeButton = Button((-190, -30, -110, 20),
                                    "Cancel",
                                    callback=self.closeCallback,
                                    sizeStyle="small")
        self.w.closeButton.bind(".", ["command"])
        self.w.closeButton.bind(chr(27), [])

        self.w.resetButton = Button((-280, -30, -200, 20),
                                    "Reset",
                                    callback=self.resetCallback,
                                    sizeStyle="small")
        self.w.open()
Esempio n. 10
0
 def applicationOpenFile(self, notification):
     path = notification["path"]
     ext = notification["ext"]
     fileHandler = notification["fileHandler"]
     if ext == ".%s" % fileExtension:
         singleItems = list(getExtensionDefault("com.mechanic.singleExtensionItems"))
         try:
             with open(path, "rb") as f:
                 item = yaml.load(f.read())
         except Exception as e:
             logger.error("Cannot read '%s' file" % path)
             logger.error(e)
         try:
             ExtensionYamlItem(item)
             if item not in singleItems:
                 singleItems.append(item)
                 setExtensionDefault("com.mechanic.singleExtensionItems", singleItems)
                 title = "Opening Mechanic file."
                 text = "Added '%s' to Mechanic" % path
             else:
                 title = "Duplicate Mechanic file."
                 text = "The extension '%s' was not added to Mechanic" % path
         except Exception as e:
             logger.error("Cannot parse the file '%s'" % path)
             logger.error(e)
             title = "Failed to read the file '%s'." % path
             text = "See the output window for a detailed traceback."
         message(title, text)
         fileHandler["opened"] = True
Esempio n. 11
0
    def glyphWindowWillClose(self, notification):
        start = time.time()
        self.roboCJKView.setglyphState(self.currentGlyph)
        self.openedGlyphName = ""
        if self.glyphInspectorWindow is not None:
            self.glyphInspectorWindow.closeWindow()
            self.glyphInspectorWindow = None
        try:
            posSize = CurrentGlyphWindow().window().getPosSize()
            setExtensionDefault(blackrobocjk_glyphwindowPosition, posSize)
            self.glyphWindowPosSize = getExtensionDefault(
                blackrobocjk_glyphwindowPosition)
        except:
            pass
        if self.currentGlyph.type != "atomicElement":
            self.window.removeGlyphEditorSubview(self.glyphView)

        self.drawer.refGlyph = None
        self.drawer.refGlyphPos = [0, 0]
        self.drawer.refGlyphScale = [1, 1]

        self.currentFont.fontLib.update(self.currentFont._RFont.lib.asDict())
        self.currentFont._fullRFont.lib.update(self.currentFont._RFont.lib)

        if not self.mysql:
            self.currentFont.save()
            if self.currentGlyph is not None:
                self.currentFont.getGlyph(self.currentGlyph)
            self.currentFont.clearRFont()
        else:
            self.currentFont.saveGlyph(self.currentGlyph)
            self.currentFont.saveFontlib()
            self.currentFont.batchUnlockGlyphs([self.currentGlyph.name])
        stop = time.time()
        print(stop - start, "to close %s" % self.currentGlyph.name)
Esempio n. 12
0
    def __init__(self, parentWindow):

        data = getExtensionDefault(self.identifier, dict())
        updateWithDefaultValues(data, defaultOptions)

        width = 380
        height = 1000

        self.w = Sheet((width, height), parentWindow=parentWindow)

        y = 10
        self.w.threaded = CheckBox((10, y, -10, 22), "Threaded", value=data["threaded"])

        y += 30
        self.w.exportInFolders = CheckBox((10, y, -10, 22), "Export in Sub Folders", value=data["exportInFolders"])

        y += 30
        self.w.keepFileNames = CheckBox((10, y, -10, 22), "Keep file names (otherwise use familyName-styleName)", value=data["keepFileNames"])

        y += 35
        self.w.saveButton = Button((-100, y, -10, 20), "Save settings", callback=self.saveCallback, sizeStyle="small")
        self.w.setDefaultButton(self.w.saveButton)

        self.w.closeButton = Button((-190, y, -110, 20), "Cancel", callback=self.closeCallback, sizeStyle="small")
        self.w.closeButton.bind(".", ["command"])
        self.w.closeButton.bind(unichr(27), [])

        self.w.resetButton = Button((-280, y, -200, 20), "Reset", callback=self.resetCallback, sizeStyle="small")

        y += 30
        self.w.resize(width, y, False)

        self.w.open()
    def __init__(self, posSize, controller, generateCallback):

        super(BinaryMerger, self).__init__(posSize)

        self.controller = controller
        self._generateCallback = generateCallback

        tableNames = getExtensionDefault(self.binaryMergerIdentifierKey, self.defaultTableNames)

        columnDescriptions = [
            dict(title="", key="add", width=20, cell=CheckBoxListCell()),
            dict(title="Table Name", key="tableName", editable=True)
            ]

        self.tableList = List((0, 0, -0, -40), tableNames,
                    columnDescriptions=columnDescriptions,
                    editCallback=self.tableListEditCallback,
                    )

        segmentDescriptions = [dict(title="+"), dict(title="-")]
        self.addDel = SegmentedButton((12, -28, 60, 20), segmentDescriptions, selectionStyle="momentary", callback=self.addDelCallback)
        self.addDel.getNSSegmentedButton().setSegmentStyle_(NSSegmentStyleSmallSquare)

        self.generate = Button((-150, -30, -10, 22), "Generate & Merge", callback=self.generateCallback)
        self.height = 240
Esempio n. 14
0
    def openWindow(self, sender=None):
    	""" Initialize the input window. """
        presets = [
            "case", "dnom", "fina", "hist", "init", "isol", "locl", "lnum", "medi", "numr", "onum", "ordn", "tnum",
            "pcap", "salt", "sinf", "smcp", "ss01", "ss02", "ss03", "ss04", "ss05", "ss06", "ss07", "ss08",
            "ss09", "ss10", "ss11", "ss12", "ss13", "ss14", "ss15", "ss16", "ss17", "ss18", "ss19", "ss20",
            "subs", "sups", "swsh", "titl", "zero" ]
        presetList = " ".join(presets)
        registerExtensionDefaults({"nl.typologic.suffixer.presetSuffixes" : presetList})
        currentPresets = getExtensionDefault("nl.typologic.suffixer.presetSuffixes").split()
        
        self.f = CurrentFont()
        if self.f is None:
            print "Suffixer: No font open"
            return
        
        existingSuffixes = []
        for g in self.f:
            suf = self._findSuffix(g.name)
            if suf != None and suf not in existingSuffixes:
                existingSuffixes.append(suf)
        existingSuffixes.sort()
        
        currentSuffix = ""
        if CurrentGlyph() is not None:
            currentSuffix = self._findSuffix(CurrentGlyph().name)
        elif self.f.selection is not None:
            for gn in self.f.selection:
                currentSuffix = self._findSuffix(gn)
                if currentSuffix != None:
                    break
        
        self.w = FloatingWindow((300, 166), "Suffixer")
        p = 10
        h = 20
        y1, y2, y3, y4 = 15, 49, 82, 135
        w1, x2 = 160, 180
        
        self.w.labelTwo = TextBox((p, y1, w1, h), "Add suffix to glyph names:")
        self.w.dotTwo = TextBox((x2, y1, 15, h), ".")
        self.w.newSuffix = ComboBox((x2+p, y1, -p, h), currentPresets)
        
        self.w.replace = CheckBox((p+2, y2, w1, h), "Replace existing suffix:", callback=self.replaceCheckCallback)
        
        self.w.dotOne = TextBox((x2, y2, 15, h), ".")
        self.w.oldSuffix = PopUpButton((x2+p, y2, -p, h), existingSuffixes)
        if currentSuffix != "" and currentSuffix != None:
            self.w.oldSuffix.set(existingSuffixes.index(currentSuffix))
        
        self.w.scope = RadioGroup((p, y3, -p, h*2), ["Target selected glyphs", "Replace all in current font"], isVertical=True)
        self.w.scope.set(0)

        currentState = 0 if currentSuffix == "" or currentSuffix == None else 1
        self.w.replace.set(currentState)
        self.w.scope.enable(currentState)
            
        self.w.submit = Button((p, y4, -p, h), "Change suffixes", callback=self.replaceSuffixes)
        self.w.setDefaultButton(self.w.submit)
        self.w.open()
        self.w.makeKey()
    def __init__(self):
        self.filters = PenBallFiltersManager()
        # self.filters.loadFiltersFromJSON('/'.join([LOCALPATH, JSONFILE]))
        filtersList = getExtensionDefault('{0}.filtersList'.format(PENBALLWIZARD_EXTENSIONKEY), [])
        self.filters.loadFiltersList(filtersList)
        self.glyphNames = []
        self.observedGlyphs = []
        self.currentFont = CurrentFont()
        self.initCachedFont()
        filtersList = self.filters.keys()
        if len(filtersList) > 0:
            self.currentFilterName = filtersList[0]
        else:
            self.currentFilterName = None
        self.fill = True

        self.observers = [
            ('fontChanged', 'fontBecameCurrent'),
            ('fontChanged', 'fontDidOpen'),
            ('fontChanged', 'fontDidClose'),
        ]

        self.displaySettingsRecord = {
            1: (u'✓ Fill', True),
            2: (u'Stroke', False),
            3: (u'Inverse', False),
        }

        self.w = Window((100, 100, 800, 500), 'PenBall Wizard v{0}'.format(__version__), minSize=(500, 400))
        self.w.filtersPanel = Group((0, 0, 300, -0))
        self.w.filtersPanel.filtersList = List((0, 0, -0, -80), filtersList, selectionCallback=self.filterSelectionChanged, doubleClickCallback=self.filterEdit, allowsMultipleSelection=False, allowsEmptySelection=False, rowHeight=22)
        self.w.filtersPanel.controls = Group((0, -80, -0, 0))
        self.w.filtersPanel.addFilter = SquareButton((0, -80, 100, 40), 'Add filter', sizeStyle='small', callback=self.addFilter)
        self.w.filtersPanel.addFilterChain = SquareButton((100, -80, 100, 40), 'Add operations', sizeStyle='small', callback=self.addFilterChain)
        self.w.filtersPanel.removeFilter = SquareButton((-100, -80, 100, 40), 'Remove filter', sizeStyle='small', callback=self.removeFilter)
        self.w.textInput = EditText((300, 0, -75, 22), '', callback=self.stringInput)
        self.w.generate = SquareButton((0, -40, 300, -0), 'Generate', callback=self.buildGenerationSheet, sizeStyle='small')
        self.w.displaySettings = PopUpButton(
            (-70, 3, -10, 15),
            self.makeDisplaySettingsMenuItems(),
            sizeStyle='mini',
            callback=self.changeDisplaySettings)
        self.w.displaySettings.getNSPopUpButton().setPullsDown_(True)
        self.w.displaySettings.getNSPopUpButton().setBordered_(False)
        self.w.preview = MultiLineView((300, 22, -0, -0))
        displayStates = self.w.preview.getDisplayStates()
        for key in ['Show Metrics','Upside Down','Stroke','Beam','Inverse','Water Fall','Multi Line']:
            displayStates[key] = False
        for key in ['Fill','Single Line']:
            displayStates[key] = True
        self.w.preview.setDisplayStates(displayStates)

        for callback, event in self.observers:
            addObserver(self, callback, event)

        self.updateControls()

        self.w.bind('close', self.end)
        self.launchWindow()
        self.w.open()
    def __init__(self):

        self.draw = False
        self.swap = True

        self.radius = getExtensionDefault(
            "%s.%s" % (WurstSchreiberDefaultKey, "radius"), 60)

        color = NSColor.colorWithCalibratedRed_green_blue_alpha_(1, 0, 0, .5)
        colorValue = getExtensionDefaultColor(
            "%s.%s" % (WurstSchreiberDefaultKey, "color"), color)

        self.w = FloatingWindow((150, 170), "WurstSchreiber")
        x = 15
        y = 15
        self.w.preview = CheckBox(
            (x, y, -x, 20),
            "Preview",
            callback=self.previewChanged,
            value=True)
        y+=30
        self.w.slider = SliderGroup(
            (x, y, -x, 22), 0, 100, self.radius, callback=self.sliderChanged)
        y+=35
        self.w.color = ColorWell(
            (x, y, -x, 40), callback=self.colorChanged, color=colorValue)
        y+=55
        self.w.button = Button(
            (x, y, -x, 20), "Trace!", callback=self.traceButton)
        addObserver(self, "drawWurst", "drawBackground")
        self.w.bind("close", self.closing)
        self.w.open()
 def _getTempTTF(self, path, report=None, preserveTTFhints=False):
     if not hasattr(self, "_tempTTFPath"):
         _, ext = os.path.splitext(path)
         ext = ext.lower()
         self._tempTTFPath = tempfile.mkstemp(suffix=".ttf")[1]
         if ext == ".otf":
             report.write("Source is binary a OTF file. Convert to TTF.")
             report.indent()
             convertToTTF(path, self._tempTTFPath, report)
             report.dedent()
         elif ext == ".ttf":
             report.write("Source is binary a TTF file.")
             shutil.copyfile(path, self._tempTTFPath)
             if not preserveTTFhints:
                 report.write("Auto hint the existing TTF file.")
                 report.indent()
                 tempDest = tempfile.mkstemp(suffix=".ttf")[1]
                 autohintOptions = getExtensionDefault(settingsIdentifier, defaultOptions)
                 result = TTFAutohint(self._tempTTFPath, tempDest, autohintOptions)
                 report.writeItems(result)
                 os.remove(self._tempTTFPath)
                 self._tempTTFPath = tempDest
                 report.dedent()
         else:
             if ext == ".ufo":
                 report.write("Source is a UFO file. Generate TTF.")
             else:
                 report.write("Source is a %s file. Import the file. Generate TTF." % (ext[1:]))
             report.indent()
             generateTTF(path, self._tempTTFPath, report)
             report.dedent()
     return self._tempTTFPath
Esempio n. 18
0
    def __init__(self, posSize, controller, generateCallback):

        super(BinaryMerger, self).__init__(posSize)

        self.controller = controller
        self._generateCallback = generateCallback

        tableNames = getExtensionDefault(self.binaryMergerIdentifierKey,
                                         self.defaultTableNames)

        columnDescriptions = [
            dict(title="", key="add", width=20, cell=CheckBoxListCell()),
            dict(title="Table Name", key="tableName", editable=True)
        ]

        self.tableList = List(
            (0, 0, -0, -40),
            tableNames,
            columnDescriptions=columnDescriptions,
            editCallback=self.tableListEditCallback,
        )

        segmentDescriptions = [dict(title="+"), dict(title="-")]
        self.addDel = SegmentedButton((12, -28, 60, 20),
                                      segmentDescriptions,
                                      selectionStyle="momentary",
                                      callback=self.addDelCallback)
        self.addDel.getNSSegmentedButton().setSegmentStyle_(
            NSSegmentStyleSmallSquare)

        self.generate = Button((-150, -30, -10, 22),
                               "Generate & Merge",
                               callback=self.generateCallback)
        self.height = 240
Esempio n. 19
0
    def makeObserverList(self):
        myList = []
        self.obsFileNames = {}
        self.obsClass = {}
        for filePath in glob.glob(p + "*.py"):
            fileName = filePath.split("/")[-1]

            # no "_"
            if fileName.startswith("_"):
                continue

            uniqueObsCODE = ""
            for i in range(5):
                uniqueObsCODE += random.choice(list(string.ascii_uppercase))
            # print(uniqueObsCODE)

            ob = imp.load_source(str(uniqueObsCODE), filePath)
            # print(ob)

            # reload(ob)
            listDiscriptionCopy = listDiscription.copy()
            listDiscriptionCopy['title'] = ob.title
            selfKey = "%sKey" % ob.title
            if getExtensionDefault(selfKey):
                listDiscriptionCopy['checkBox'] = True
                # myList.append(listDiscptionCopy)
            self.obsFileNames[ob.title] = fileName
            self.obsClass[ob.title] = ob
            myList.append(listDiscriptionCopy)
        newlist = sorted(myList, key=itemgetter('title'))

        return newlist
    def __init__(self):

        self.snapToCloseDistance = 4

        if getExtensionDefault(scriptStateKey, fallback=False):
            addObserver(self, "mouseDownCallback", "mouseDown")
            addObserver(self, "mouseUpCallback", "mouseUp")
Esempio n. 21
0
    def generate(self, saveDir):
        if not saveDir:
            return
        
        saveDir = saveDir[0]
        
        f = self.font.naked()
        
        glyphs = [g for g in f if not g.template]
        
        progress = ProgressWindow("Generating .png's", tickCount=len(glyphs), parentWindow=self.window)
        
        gridSize = int(getExtensionDefault(GRID_DEFAULTS_KEY, 50))

        for g in glyphs:
            if g.unicode is not None:
                fileName =  "%04X" %g.unicode
            else:
                fileName = glyphNameToFileName(g.name, f)
            path = os.path.join(saveDir, "%s.png" %fileName)
    
            image = g.getRepresentation("com.typemytype.pixelImageFactory", gridSize=gridSize)
            data = image.TIFFRepresentation()
            imageRep = NSBitmapImageRep.imageRepWithData_(data)
            pngData = imageRep.representationUsingType_properties_(NSPNGFileType, None)
            pngData.writeToFile_atomically_(path, False)
            progress.update()
        progress.close()
Esempio n. 22
0
    def checkOnUnicode(self, sender):
        if sender == self.w.latin_supp:
            myset = Latin_Supp_block
        if sender == self.w.latin_A:
            myset = Latin_Ext_A_block
        if sender == self.w.latin_B:
            myset = Latin_Ext_B_block
        if sender == self.w.latin_add:
            myset = Latin_Ext_A_block
            myset = Latin_Ext_additional_block

        g = CurrentGlyph()
        defaults = getExtensionDefault(defaultKey, dict())
        # print Latin_Supp_block
        # print
        # print defaults
        # print

        for glyphName in myset:
            if glyphName == g.name:
                # g.name
                for anchorName in myset[glyphName]:
                    # top
                    for accent in myset[glyphName][anchorName]:
                        # grave
                        for listItem in self.w.list.get():

                            for pijl in pijlen.items():
                                if listItem["anchor"] == pijl[1]:
                                    anchor = pijl[0]
                                    if anchor == anchorName and accent == listItem[
                                            'accent']:
                                        listItem['checkBox'] = True
    def __init__(self):
        self.fullMetadata = getExtensionDefault("%s.scriptMetadata" %
                                                KEYPREFIX,
                                                fallback={})
        if not len(self.fullMetadata.keys()):
            # "Restart" window
            self.w = vanilla.Window((500, 160), "Andy’s RoboFont Hacks")
            self.w.hr = vanilla.HorizontalLine((10, -50, -10, 1))
            self.w.restartText = vanilla.TextBox(
                (20, 20, -20, -45),
                text_Bold(
                    "Installed and updated.\nRestart RoboFont to refresh the list of my RoboFont hacks.\n\n    — Andy Clymer"
                ))
            self.w.okButton = vanilla.Button((-120, -35, 100, 20),
                                             "OK",
                                             callback=self.cancelCallback)
            self.w.open()

        else:
            # Full window
            self.w = vanilla.Window((750, 300), "Andy’s RoboFont Hacks")
            columnDescriptions = [{
                "title": "state",
                "width": 20,
                "cell": vanilla.CheckBoxListCell()
            }, {
                "title": "longName"
            }]
            self.w.scriptList = vanilla.List(
                (10, 10, 300, -60), [],
                allowsMultipleSelection=False,
                showColumnTitles=False,
                selectionCallback=self.listSelectionChanged,
                columnDescriptions=columnDescriptions)

            self.defaultTitle = "Andy’s RoboFont Hacks"
            self.defaultText = "A selection of extras that make RoboFont work the way I like it. \n\nEverything is optional, click on one of the names on the left for a description of what the add-on does. Select as many as you like by checking the box to the left of the name, and restart RoboFont to activate.\n\n    — Andy Clymer"
            self.w.descriptionBox = vanilla.Box((320, 10, -10, -60))
            self.w.descriptionBox.title = vanilla.TextBox((5, 5, -10, 25),
                                                          self.defaultTitle)
            self.w.descriptionBox.text = vanilla.TextBox((5, 38, -10, -10),
                                                         self.defaultText)
            #self.w.webView = WebView.alloc().initWithFrame_(((0, 0), (320, 1000)))
            #self.w.scroll = vanilla.ScrollView((320, 10, -10, -60), self.w.webView, hasHorizontalScroller=False, hasVerticalScroller=False)
            #self.w.webView.setMainFrameURL_(self.htmlPath)

            self.w.hr = vanilla.HorizontalLine((10, -50, -10, 1))
            self.w.changeNote = vanilla.TextBox(
                (20, -32, -230, 25),
                text_SmallGray("Any change will require restarting RoboFont."),
                sizeStyle="small")
            self.w.cancelButton = vanilla.Button((-230, -35, 100, 20),
                                                 "Cancel",
                                                 callback=self.cancelCallback)
            self.w.applyButton = vanilla.Button((-120, -35, 100, 20),
                                                "Apply",
                                                callback=self.applyCallback)
            self.populateList()
            self.w.open()
Esempio n. 24
0
 def readThemePrefs(self):
     if self.debug: print("readThemePrefs")
     # Use getExtensionDefault() to read out all of the saved themes
     savedThemes = getExtensionDefault(DEFAULTSKEY)
     if savedThemes:
         # Copy each theme into the self.themes dictionary
         for theme in savedThemes:
             self.themes += [theme]
Esempio n. 25
0
 def openFile(self, notification):
     if getExtensionDefault("com.drawBot.openPyFileDirectly", False):
         fileHandler = notification["fileHandler"]
         path = notification["path"]
         _, ext = os.path.splitext(path)
         if ext.lower() == ".py":
             DrawBotController().open(path)
             fileHandler["opened"] = True
    def __init__(self):
        self.w = Window((250, 45), "DrawBot Settings")

        self.w.openPythonFilesInDrawBot = CheckBox((10, 10, -10, 22), "Open .py files directly in DrawBot.", 
                                                value=getExtensionDefault("com.drawBot.openPyFileDirectly", False),
                                                callback=self.openPythonFilesInDrawBotCallback)

        self.w.open()
Esempio n. 27
0
 def _loadDefaults(self):
     self._positions = {}
     positions = extensions.getExtensionDefault(defaultStub + "positions")
     for position, name in positions.items():
         position = tuple(position.split(" "))
         self._positions[position] = name
     self._margin = extensions.getExtensionDefault(defaultStub + "margin")
     self._inactiveOpacity = extensions.getExtensionDefault(
         defaultStub + "inactiveOpacity")
     r, g, b, a = extensions.getExtensionDefault(defaultStub +
                                                 "foregroundColor")
     self._foregroundColor = NSColor.colorWithCalibratedRed_green_blue_alpha_(
         r, g, b, a)
     r, g, b, a = extensions.getExtensionDefault(defaultStub +
                                                 "backgroundColor")
     self._backgroundColor = NSColor.colorWithCalibratedRed_green_blue_alpha_(
         r, g, b, a)
Esempio n. 28
0
    def __init__(self, constructions, font, parentWindow):

        self.font = font
        self.constructions = constructions

        self.w = Sheet((300, 170), parentWindow=parentWindow)
        getExtensionDefault, setExtensionDefault, getExtensionDefaultColor, setExtensionDefaultColor
        y = 15
        self.w.overWrite = CheckBox(
            (15, y, 200, 22),
            "Overwrite Existing Glyphs",
            value=getExtensionDefault(self.overWriteKey, True))

        y += 35
        self.w.autoUnicodes = CheckBox((15, y, 200, 22),
                                       "Auto Unicodes",
                                       value=True)

        y += 35
        self.w.markGlyphs = CheckBox(
            (15, y, 200, 22),
            "Mark Glyphs",
            value=getExtensionDefault(self.overWriteKey, True),
            callback=self.markGlyphsCallback)
        self.w.markGlyphColor = ColorWell(
            (130, y - 5, 50, 30),
            color=getExtensionDefaultColor(self.markColorKey,
                                           NSColor.redColor()))

        self.w.markGlyphColor.enable(
            getExtensionDefault(self.overWriteKey, True))

        self.w.okButton = Button((-70, -30, -15, 20),
                                 "Build",
                                 callback=self.buildCallback,
                                 sizeStyle="small")
        self.w.setDefaultButton(self.w.okButton)

        self.w.closeButton = Button((-140, -30, -80, 20),
                                    "Cancel",
                                    callback=self.closeCallback,
                                    sizeStyle="small")
        self.w.closeButton.bind(".", ["command"])
        self.w.closeButton.bind(unichr(27), [])

        self.w.open()
Esempio n. 29
0
    def get_defaults(self):

        otf_1  = getExtensionDefault('%s.otf_1'  % self.extension_key, None)
        otf_2  = getExtensionDefault('%s.otf_2'  % self.extension_key, None)
        folder = getExtensionDefault('%s.folder' % self.extension_key, None)

        if otf_1 is not None and os.path.exists(otf_1):
            self.otf_1 = otf_1
            self.w.otf_1_status.set('%s' % unichr(10003))

        if otf_2 is not None and os.path.exists(otf_2):
            self.otf_2 = otf_2
            self.w.otf_2_status.set('%s' % unichr(10003))

        if folder is not None and os.path.exists(folder):
            self.folder = folder
            self.w.folder_status.set('%s' % unichr(10003))
 def openFile(self, notification):
     if getExtensionDefault("com.drawBot.openPyFileDirectly", False):
         fileHandler = notification["fileHandler"]
         path = notification["path"]
         _, ext = os.path.splitext(path)
         if ext.lower() == ".py":
             DrawBotController().open(path)
             fileHandler["opened"] = True
Esempio n. 31
0
    def searchGlyphListCallback(self, sender):
        """
		2020/02/25
		modified by Cho
		
		If there is saved file in directory, load groupDict,
		else go through matrix, topology process to get groupDict & save it.

		and then print it on the lineView.
		"""
        file = getExtensionDefault(DefaultKey + ".file")
        jsonFilePath = getExtensionDefault(DefaultKey + ".jsonFilePath")
        jsonFileName1 = getExtensionDefault(DefaultKey + ".jsonFileName1")
        jsonFileName2 = getExtensionDefault(DefaultKey + ".jsonFileName2")
        font = getExtensionDefault(DefaultKey + ".font")
        groupDict = getExtensionDefault(DefaultKey + ".groupDict")
        KoreanCheck = getExtensionDefault(DefaultKey + ".korean")

        standardGlyph = self.searchGlyph
        setExtensionDefault(DefaultKey + ".standardGlyph", standardGlyph)
        contourIndex = int(self.w.contourIndex.slider.get())
        standardContour = standardGlyph.contours[contourIndex]
        setExtensionDefault(DefaultKey + ".standardContour", standardContour)

        if KoreanCheck == True:
            print("korean")
            tMC.handleSearchGlyphList(standardGlyph, contourIndex, groupDict)
        else:
            print("chinese")
            ctMC.cHandleSearchGlyphList(standardGlyph, contourIndex, groupDict)
        return
Esempio n. 32
0
 def _load_settings(self):
     for settings_key, setting in self.settings.iteritems():
         self.settings[settings_key].value = getExtensionDefault(
             "%s.%s" % (
                 self._extension_id,
                 settings_key
             ),
             setting.default_value
         )
 def _load_settings(self):
     for settings_key, setting in self.settings.iteritems():
         self.settings[settings_key].value = getExtensionDefault(
             "%s.%s" % (
                 self._extension_id,
                 settings_key
             ),
             setting.default_value
         )
Esempio n. 34
0
    def replaceSuffixes(self, sender):
        """ Handle replacing/appending of suffixes. """
        mode = "replace" if self.w.replace.get() == 1 else "append"
        oldSuffix = self.w.oldSuffix.getItems()[self.w.oldSuffix.get()]
        enteredSuffix = self.w.newSuffix.get()
        suffixes_in = [oldSuffix, enteredSuffix]

        suffixes = []  # build proper suffixes list
        for s in suffixes_in:
            if s is not None and len(s) > 0:
                if s[0] == ".":
                    s = s[1:]  # handle suffixes without periods
            suffixes.append(s)

        if mode == "replace" and suffixes[0] == suffixes[1]:
            Message(
                u"Cannot replace a suffix with itself.\nI mean I could, but there seems to be little point :)"
            )
        elif mode == "append" and suffixes[1] == "":
            Message(
                u"Cannot append an empty suffix.\n(Or you could just pretend I've already done it.)"
            )

        else:
            scope = self.f.keys() if self.w.scope.get(
            ) == 1 else self.f.selection

            if mode == "replace":
                for gname in scope:
                    if gname.endswith(suffixes[0]):
                        sufLen = len(suffixes[0])
                        if len(suffixes[1]) > 0:
                            newName = gname[:-sufLen] + suffixes[1]
                        else:
                            sufLenWithPeriod = sufLen + 1
                            newName = gname[:-sufLenWithPeriod]
                        self._changeGlyphname(gname, newName)

            elif mode == "append":
                for gname in scope:
                    newName = gname + "." + suffixes[1]
                    self._changeGlyphname(gname, newName)

            self.f.update()

            # store new values as defaults
            savedPresets = getExtensionDefault(
                "nl.typologic.suffixer.presetSuffixes")
            if enteredSuffix != "" and enteredSuffix not in savedPresets:
                savedPresetsList = savedPresets.split()
                savedPresetsList.append(enteredSuffix)
                savedPresetsList.sort()
                newPresets = " ".join(savedPresetsList)
                setExtensionDefault("nl.typologic.suffixer.presetSuffixes",
                                    newPresets)

            self.w.close()
Esempio n. 35
0
 def mouseDown(self, info):
     self.f = CurrentFont()
     self.x = info["point"].x
     self.y = info["point"].y
     self.italAngle = getItalAngle(self.f)
     addObserver(self, "draw", "draw")
     addObserver(self, "mouseDragged", "mouseDragged")
     if getExtensionDefault(defaultKeyObserverVisibility) == False:
         removeObserver(self, "mouseDragged")
         removeObserver(self, "draw")
    def __init__(self):
        self.w = Window((250, 45), "DrawBot Settings")

        self.w.openPythonFilesInDrawBot = CheckBox(
            (10, 10, -10, 22),
            "Open .py files directly in DrawBot.",
            value=getExtensionDefault("com.drawBot.openPyFileDirectly", False),
            callback=self.openPythonFilesInDrawBotCallback)

        self.w.open()
    def _end(self):
        removeObserver(getExtensionDefault(selfKey), event)
        # See _activate()

        setExtensionDefault(selfKey, None)
        # this is optional
        if wasOn:
            self.restoreGlyphViewItems()
        # kill settings window
        self.settingsWindow(onOff=False)
    def __init__(self, posSize, controller):
        super(WebFormats, self).__init__(posSize)
        self.controller = controller

        y = 10
        for setting in self.webSettings:
            key = setting.replace(" ", "_").lower()
            checkBox = CheckBox((10, y, -10, 22), setting,
                                value=getExtensionDefault("%s.%s" % (settingsIdentifier, key), True),
                                callback=self.saveDefaults)
            setattr(self, key, checkBox)
            if "Woff" in setting:
                formatOption = BatchRadioGroup((120, y, 85, 22),
                    ["OTF", "TTF"],
                    value=getExtensionDefault("%s.format_%s" % (settingsIdentifier, key), True),
                    callback=self.saveDefaults,
                    isVertical=False,
                    sizeStyle="mini")
                setattr(self, "%s_format" % key, formatOption)
            y += 30

        self.save_svg.enable(hasUfo2svg)
        y += 5
        self.preserveTTFhints = CheckBox((10, y, -10, 18), "Preserve TTF hints",
            value=getExtensionDefault("%s.preserveTTFhints" % settingsIdentifier, False),
            sizeStyle="small")
        y += 30
        self.generateHTML = CheckBox((10, y, -10, 18), "Generate HTML",
            value=getExtensionDefault("%s.generateHTML" % settingsIdentifier, True),
            sizeStyle="small")
        y += 30

        middle = 45
        self.suffixText = TextBox((10, y + 2, middle, 22), "Suffix:", alignment="right")
        self.webSuffix = EditText((middle + 10, y, 100, 22),
            getExtensionDefault("%s.webSuffix" % settingsIdentifier, "_web"),
            callback=self.saveDefaults)
        y += 30

        self.convert = Button((-100, -30, -10, 22), "Generate", callback=self.convertCallback)
        self.settings = ImageButton((-130, -28, 20, 20), bordered=False, imageNamed=NSImageNameSmartBadgeTemplate, callback=self.settingsCallback)

        self.height = y
Esempio n. 39
0
    def __init__(self, posSize, controller):
        super(BatchGenerate, self).__init__(posSize)
        self.controller = controller

        y = 10
        for setting in self.generateSettings:
            key = setting.replace(" ", "_").lower()
            checkbox = CheckBox(
                (10, y, -10, 22),
                setting,
                value=getExtensionDefault("%s.%s" % (settingsIdentifier, key),
                                          True),
                sizeStyle="small",
                callback=self.saveDefaults)
            setattr(self, key, checkbox)
            y += 25

        y += 10
        for format in doodleSupportedExportFileTypes:
            checkbox = CheckBox((10, y, -10, 22),
                                format.upper(),
                                value=getExtensionDefault(
                                    "%s.%s" % (settingsIdentifier, format),
                                    format != "pfa"),
                                callback=self.saveDefaults)
            setattr(self, format, checkbox)
            y += 30

        middle = 45
        self.suffixText = TextBox((10, y + 2, middle, 22),
                                  "Suffix:",
                                  alignment="right")
        self.generateSuffix = EditText(
            (middle + 10, y, 100, 22),
            getExtensionDefault("%s.generateSuffix" % settingsIdentifier, ""),
            callback=self.saveDefaults)
        y += 30

        self.generate = Button((-100, -30, -10, 22),
                               "Generate",
                               callback=self.generateCallback)
        self.height = y
 def loadSettings(self):
     # loading settings
     zero_settings = self.items
     settings = getExtensionDefault(self.key, fallback=self.items)
     if settings:
         for name in settings:
             self.items[name] = settings[name]
         else:
             self.items = zero_settings
     else:
         self.items = zero_settings
Esempio n. 41
0
    def __init__(self):

        self.prefKey = 'com.okaytype.addOverlap'
        initialDefaults = {self.pref: '-30'}
        registerExtensionDefaults(initialDefaults)
        self.toolValue = getExtensionDefault(self.pref)

        addObserver(self, "addOverlapToolbarItem",
                    "glyphWindowWillShowToolbarItems")
        addObserver(self, "addOverlapValueUI", "glyphWindowWillOpen")
        addObserver(self, 'updateSelfWindow', 'currentGlyphChanged')
    def mainFunction(self, info):
        if not getExtensionDefault(settingsWindow):
            self.settingsWindow(onOff=True)
        save()
        stroke(0.01, 0.68, 0.5, 1)
        strokeWidth(1)
        fill(None)
        rect(self.xmin[0], self.ymin[0], self.xmax[0] - self.xmin[0],
             self.ymax[0] - self.ymin[0])

        restore()
Esempio n. 43
0
    def applicationDidFinishLaunching(self, notification):
        shouldCheckForUpdates = getExtensionDefault("com.mechanic.checkForUpdate")
        if not shouldCheckForUpdates:
            return
        lastCheck = getExtensionDefault("com.mechanic.lastUpdateCheck")
        oneDay = 60 * 60 * 24
        now = time.time()
        if lastCheck + oneDay < now:
            messageText = "Mechanic would like to check for updates."
            informativeText = "Updating might take some time, you can check for updates later by opening the Mechanic extension."

            alert = BaseMessageDialog.alloc().initWithMessageText_informativeText_alertStyle_buttonTitlesValues_window_resultCallback_(
                messageText=messageText,
                informativeText=informativeText,
                buttonTitlesValues=[("Now", 1), ("Later", 0)]
            )
            if alert._value:
                MechanicController(checkForUpdates=True)

            setExtensionDefault("com.mechanic.lastUpdateCheck", now)
Esempio n. 44
0
    def __init__(self, parentWindow):

        data = getExtensionDefault(self.identifier, dict())
        updateWithDefaultValues(data, defaultOptions)
        data["debug"] = getDefault("Batch.Debug", False)

        width = 380
        height = 1000

        self.w = Sheet((width, height), parentWindow=parentWindow)

        y = 10
        self.w.threaded = CheckBox((10, y, -10, 22),
                                   "Threaded",
                                   value=data["threaded"])

        y += 30
        self.w.exportInFolders = CheckBox((10, y, -10, 22),
                                          "Export in Sub Folders",
                                          value=data["exportInFolders"])

        y += 30
        self.w.keepFileNames = CheckBox(
            (10, y, -10, 22),
            "Keep file names (otherwise use familyName-styleName)",
            value=data["keepFileNames"])

        y += 30
        self.w.debug = CheckBox((10, y, -10, 22), "Debug", value=data["debug"])

        y += 35
        self.w.saveButton = Button((-100, y, -10, 20),
                                   "Save settings",
                                   callback=self.saveCallback,
                                   sizeStyle="small")
        self.w.setDefaultButton(self.w.saveButton)

        self.w.closeButton = Button((-190, y, -110, 20),
                                    "Cancel",
                                    callback=self.closeCallback,
                                    sizeStyle="small")
        self.w.closeButton.bind(".", ["command"])
        self.w.closeButton.bind(chr(27), [])

        self.w.resetButton = Button((-280, y, -200, 20),
                                    "Reset",
                                    callback=self.resetCallback,
                                    sizeStyle="small")

        y += 30
        self.w.resize(width, y, False)

        self.w.open()
    def restore_state(self):

        # Restore saved state

        # If we come in from an older version, the selected method index
        # may be out of range
        method = getExtensionDefault("%s.%s" % (extensionID, "method"), 0)
        if method < 0 or method >= len(self.methods):
            method = 0
        self.paletteView.group.eqMethodSelector.set(method)
        self.method = self.methods[method]

        # default curvature for slider
        self.paletteView.group.eqCurvatureSlider.set(
            getExtensionDefault("%s.%s" % (extensionID, "curvatureFree"), 0.5))
        self.curvatureFree = self.paletteView.group.eqCurvatureSlider.get()

        # default curvature for Hobby's spline tension slider
        self.paletteView.group.eqHobbyTensionSlider.set(
            getExtensionDefault("%s.%s" % (extensionID, "tension"), 0.5))
        self.tension = self.paletteView.group.eqHobbyTensionSlider.get()

        # load preview options
        self.alwaysPreviewCurves = getExtensionDefault(
            "%s.%s" % (extensionID, "previewCurves"), False)
        self.alwaysPreviewHandles = getExtensionDefault(
            "%s.%s" % (extensionID, "previewHandles"), False)

        self._setPreviewOptions()

        self.drawGeometry = getExtensionDefault(
            "%s.%s" % (extensionID, "drawGeometry"), False)
Esempio n. 46
0
    def becomeActive(self):
        """
        Boot up the dialog.
        """
        
        self.fillColor = getExtensionDefaultColor(self.DEFAULTKEY_FILLCOLOR, self.FALLBACK_FILLCOLOR)
        self.strokeColor = getExtensionDefaultColor(self.DEFAULTKEY_STROKECOLOR, self.FALLBACK_STROKECOLOR)
        
        self.w = FloatingWindow((260, 130), "Bounding Options", minSize=(100, 100), closable=False)

        self.w.viewOptions = RadioGroup((10, 10, 150, 20),
                                        ['Selection', 'Glyph'],
                                        callback=self.selectionCallback, isVertical=False, sizeStyle="small")
        self.w.viewOptions.set(getExtensionDefault(self.DEFAULTKEY_SELECTION, 0))
        
        self.w.useItalic = CheckBox((165, 10, 100, 20), "Use Italic", value=getExtensionDefault(self.DEFAULTKEY_USEITALIC, True), sizeStyle="small", callback=self.useItalicCallback)

        self.w.xLabel = TextBox((10, 40, 70, 20), "Divisions: X", sizeStyle="small")

        self.w.divisionsRadioX = Slider((80, 40, 70, 20),
        value=getExtensionDefault(self.DEFAULTKEY_DIVISIONSX, 1),
        minValue=1,
        maxValue=4,
        tickMarkCount=4,
        stopOnTickMarks=True,
        continuous=True,
        sizeStyle="small",
        callback=self.divisionsXCallback)

        self.w.yLabel = TextBox((160, 40, 70, 20), "Y", sizeStyle="small")
        self.w.divisionsRadioY = Slider((175, 40, 70, 20),
        value=getExtensionDefault(self.DEFAULTKEY_DIVISIONSY, 1),
        minValue=1,
        maxValue=4,
        tickMarkCount=4,
        stopOnTickMarks=True,
        continuous=True,
        sizeStyle="small",
         callback=self.divisionsYCallback)

        self.w.drawGuidesButton = Button((10, 100, 90, 20), 'Div Guides', callback=self.drawDivGuides, sizeStyle="small")
        self.w.drawBoxGuidesButton = Button((120, 100, 90, 20), 'Box Guides', callback=self.drawBoxGuides, sizeStyle="small",)
            

        x = 10
        y = 70
        self.w.showCoordinates = CheckBox((x, y, 90, 20), "Coordinates", value=getExtensionDefault(self.DEFAULTKEY_SHOWCOORDINATES, True), sizeStyle="small", callback=self.showCoordinatesCallback)
        x += 90
        self.w.showDimensions = CheckBox((x, y, 90, 20), "Dimensions", value=getExtensionDefault(self.DEFAULTKEY_SHOWDIMENSIONS, True), sizeStyle="small", callback=self.showDimensionsCallback)
            
        
        x += 90
        color = getExtensionDefaultColor(self.DEFAULTKEY_FILLCOLOR, self.FALLBACK_FILLCOLOR)
        self.w.color = ColorWell((x, y, 30, 22), 
                color=color,
                callback=self.colorCallback)

        self.setUpBaseWindowBehavior()
        self.w.open()
Esempio n. 47
0
    def loadExtensions(self):
        self._wrappedItems = []
        self._canLoadSingleExtensions = True
        self._progress = self.startProgress("Loading extensions...")

        streams = getExtensionDefault("com.mechanic.urlstreams")
        for urlStream in streams:
            parsedExtensionStoreDataURL = urlparse(extensionStoreDataURL)
            parsedUrlStream = urlparse(urlStream)
            if parsedUrlStream.hostname == parsedExtensionStoreDataURL.hostname:
                DefaultURLReader.fetch(urlStream, self._makeExtensionStoreItems)
            else:
                DefaultURLReader.fetch(urlStream, self._makeExtensionRepositories)
    def __init__(self):
        self.w = FloatingWindow((220, 240), "2 Twitter")

        left = 100
        y = 10

        userName = getExtensionDefault("%s.%s" % (defaultKey, "userName"), "")
        password = getExtensionDefault("%s.%s" % (defaultKey, "password"), "")

        self.w.userNameText = TextBox((10, y, left, 22), "User name:")
        self.w.userName = EditText((left, y, -10, 22), userName)
        y += 30

        self.w.passwordText = TextBox((10, y, left, 22), "Password:"******"Glyph View", "Space Center"]
        self.w.view = RadioGroup((10, y, -10, -40), self._viewNames)
        self.w.view.set(0)

        self.w.okButton = Button((-70, -30, -15, 20),
                                 "Post",
                                 callback=self.okCallback,
                                 sizeStyle="small")
        self.w.setDefaultButton(self.w.okButton)

        self.w.closeButton = Button((-140, -30, -80, 20),
                                    "Cancel",
                                    callback=self.closeCallback,
                                    sizeStyle="small")
        self.w.closeButton.bind(".", ["command"])
        self.w.closeButton.bind(unichr(27), [])

        self.w.open()
Esempio n. 49
0
    def replaceSuffixes(self, sender):
    	""" Handle replacing/appending of suffixes. """
        mode = "replace" if self.w.replace.get() == 1 else "append"
        oldSuffix = self.w.oldSuffix.getItems()[self.w.oldSuffix.get()]
        enteredSuffix = self.w.newSuffix.get()
        suffixes_in = [oldSuffix, enteredSuffix]
        
        suffixes = [] # build proper suffixes list
        for s in suffixes_in:
            if s is not None and len(s) > 0:
                if s[0] == ".":
                    s = s[1:] # handle suffixes without periods
            suffixes.append(s)

        if mode == "replace" and suffixes[0] == suffixes[1]:
            Message(u"Cannot replace a suffix with itself.\nI mean I could, but there seems to be little point :)")
        elif mode == "append" and suffixes[1] == "":
            Message(u"Cannot append an empty suffix.\n(Or you could just pretend I've already done it.)")

        else:
	        scope = self.f.keys() if self.w.scope.get() == 1 else self.f.selection

	        if mode == "replace":
	            for gname in scope:
	                if gname.endswith(suffixes[0]):
	                    sufLen = len(suffixes[0])
	                    if len(suffixes[1]) > 0:
	                        newName = gname[:-sufLen] + suffixes[1]
	                    else:
	                        sufLenWithPeriod = sufLen+1
	                        newName = gname[:-sufLenWithPeriod]
                        self._changeGlyphname(gname, newName)
	                        
	        elif mode == "append":
	            for gname in scope:
	                newName = gname + "." + suffixes[1]
	                self._changeGlyphname(gname, newName)
	                
	        self.f.autoUnicodes()
	        self.f.update()
	        
	        # store new values as defaults
	        savedPresets = getExtensionDefault("nl.typologic.suffixer.presetSuffixes")
	        if enteredSuffix != "" and enteredSuffix not in savedPresets:
	            savedPresetsList = savedPresets.split()
	            savedPresetsList.append(enteredSuffix)
	            savedPresetsList.sort()
	            newPresets = " ".join(savedPresetsList) 
	            setExtensionDefault("nl.typologic.suffixer.presetSuffixes", newPresets)
	        
	        self.w.close()
    def __init__(self, posSize, controller):
        super(BatchVariableFontGenerate, self).__init__(posSize)
        self.controller = controller

        y = 10
        for setting in self.generateSettings:
            key = setting.replace(" ", "_").lower()
            checkbox = CheckBox((10, y, -10, 22), setting,
                                value=getExtensionDefault("%s.%s" % (settingsIdentifier, key), True),
                                sizeStyle="small",
                                callback=self.saveDefaults)
            setattr(self, key, checkbox)
            y += 25
        y += 10
        self.generate = Button((-100, -30, -10, 22), "Generate", callback=self.generateCallback)
        self.height = y
def generateTTF(ufoPath, dest, report):
    tempDest = tempfile.mkstemp(suffix=".ttf")[1]

    font = RFont(ufoPath, document=False, showInterface=False)
    font.lib[shouldAddPointsInSplineConversionLibKey] = 1

    result = font.generate(path=tempDest, format="ttf", decompose=False, checkOutlines=True, autohint=False, releaseMode=True, glyphOrder=font.glyphOrder)
    if not font.hasInterface():
        font.close()
    report.write(result)

    autohintOptions = getExtensionDefault(settingsIdentifier, defaultOptions)
    result = TTFAutohint(tempDest, dest, autohintOptions)
    report.writeItems(result)

    os.remove(tempDest)
Esempio n. 52
0
 def toggle_panels():
     '''Show/hide all floating windows in the current workspace.'''
     # get panels
     windows = NSApp.windows()
     panels = [ window for window in windows if isinstance(window, NSPanel) ]
     # get state
     show_panels = getExtensionDefault('com.hipertipo.showHidePanels', fallback=True)
     # hide panels
     if show_panels:
         for panel in panels:
             panel.orderOut_(None)
         setExtensionDefault('com.hipertipo.showHidePanels', False)
     # show panels
     if show_panels is False:
         for panel in panels:
             if str(type(panel)) != '<objective-c class NSColorPanel at 0x7fff750fad60>':
                 panel.orderBack_(None)
         setExtensionDefault('com.hipertipo.showHidePanels', True)
Esempio n. 53
0
	def __init__(self):
		width = 300
		height = 400
		y=7
		self.w = FloatingWindow((width, height), "PDF Settings")

		# file name
		self.w.fileNameText = TextBox((10,y,-10,22), "File name", sizeStyle='small')
		self.w.fileNameEdit = EditText((10,y+22,-10,25), text=getExtensionDefault(_PDFFileNameKey), callback=self._warning, continuous=False)
		
		y+=60
		self.w.txt = TextBox((10,y,-10,100), extra, sizeStyle='small')
		self.w.line0 = HorizontalLine((10,y+55,-10,1))
		
		y+=70
		# time stamp
		self.w.timeStampOnOff = CheckBox((10, y, -10, 25), "Add timestamp:", value=getExtensionDefault(_PDFTimeStampOnOffKey), callback=self._warning, sizeStyle='small')
		self.w.timeStamp = EditText((125,y, -10, 25), text=getExtensionDefault(_PDFTimeStampKey), continuous=False, callback=self._warning)
		self.w.timestampInfo = Button((125,y+28,-10,20),"timestamp syntax docs", callback=self.timeStampInfoCallback, sizeStyle='small')

		self.w.line1 = HorizontalLine((10,y+60,-10,1))
		
		y+=70
		self.w.limitText = TextBox((10,y+5, -10,25), "Limit %text characters:", sizeStyle='small')
		self.w.limitEdit = EditText((170,y,-10,25), "5", placeholder="int")
		self.w.lineLimit = HorizontalLine((10,y+35,-10,1))

		y+=50
		# folder
		self.w.folderText = TextBox((10,y,-10,25), "Folder", sizeStyle='small')
		self.w.folder = RadioGroup((10,y+10,-100,35), ["UFO folder","Other"], callback=self._warning, sizeStyle='small', isVertical = False)
		self.w.folder.set(getExtensionDefault(_PDFFolderKey))
		self.w.folderPath = EditText((10,y+40,-10,25), getExtensionDefault(_PDFFolderPathKey), readOnly=True)
		self.w.folderChange = Button((-100,y+14,-10,25), "Change folder", callback=self.changeFolderPath, sizeStyle='small')

		self.w.line2 = HorizontalLine((10,y+80,-10,1))

		
		y += 90
		# open PDF
		self.w.openPDF = CheckBox((10, y, -10, 25), "Open PDF immediately", value=getExtensionDefault(_PDFOpenPDFKey), callback=self._warning, sizeStyle='small')
		
		# status
		self.w.statusBar = StatusBar((0, -20, 0, 0))

		self.w.bind("close",self._close)
		self.w.open()
    def _writeHTMLPreview(self, htmlWriter, cssWriter, fileName, familyName, styleName, saveTTF, saveWOFF, saveWOFF2, saveEOT, saveSVG):
        # css
        if self.controller.exportInFolders():
            cssFileName = "%s/%s/%s" % (familyName.replace(" ", ""), styleName.replace(" ", ""), fileName)
        else:
            cssFileName = fileName

        cssWriter.write("@font-face {")
        cssWriter.indent()
        cssWriter.write("font-family: '%s_%s';" % (familyName, styleName))

        cssSources = []
        if saveEOT:
            cssWriter.write("src:    url('%s.eot');" % cssFileName)
            cssSources.append("url('%s.eot?#iefix') format('embedded-opentype')" % cssFileName)
        if saveWOFF:
            cssSources.append("url('%s.woff') format('woff')" % cssFileName)
        if saveWOFF2:
            cssSources.append("url('%s.woff2') format('woff2')" % cssFileName)
        if saveTTF:
            cssSources.append("url('%s.ttf') format('truetype')" % cssFileName)
        if saveSVG:
            cssSources.append("url('%s.svg#svgFontName') format('svg')" % cssFileName)

        cssWriter.write("src:    %s;" % (",\n        ".join(cssSources)))
        cssWriter.write("font-weight: normal;")
        cssWriter.write("font-style: normal;")
        cssWriter.dedent()
        cssWriter.write("}")
        cssWriter.newLine()

        # html
        htmlWriter.write("<div style='font-family: \"%s_%s\", \"AdobeBlank\";'>" % (familyName, styleName))
        html = getExtensionDefault("%s.htmlPreview" % settingsIdentifier, htmlPreviewDefault)
        html = _percentageRe.sub("&#37;", html)
        html = html % dict(familyName=familyName, styleName=styleName)
        htmlWriter.write(html.encode("ascii", 'xmlcharrefreplace').decode("utf-8"))
        htmlWriter.write("</div>")
def convertToTTF(otfPath, dest, report):
    temp = tempfile.mkstemp(suffix=".ttf")[1]
    tempDest = tempfile.mkstemp(suffix=".ttf")[1]

    font = RFont(otfPath, document=False, showInterface=False)
    font.lib[shouldAddPointsInSplineConversionLibKey] = 1
    font.kerning.clear()

    for attr in font.info.asDict().keys():
        if attr not in defaultFontInfoAttributes:
            setattr(font.info, attr, None)

    result = font.generate(path=temp, format="ttf", decompose=False, checkOutlines=False, autohint=False, releaseMode=True, glyphOrder=font.glyphOrder)
    if not font.hasInterface():
        font.close()
    report.write(result)

    sourceFont = TTFont(temp)
    sourceFontWithTables = TTFont(otfPath)

    for table in ["loca", "OS/2", "cmap", "name", "GSUB", "GPOS", "GDEF", "kern"]:
        if table in sourceFontWithTables:
            sourceFont[table] = sourceFontWithTables[table]
    fixMetrics(sourceFont)
    sourceFont.save(tempDest)

    sourceFont.close()
    del sourceFont
    sourceFontWithTables.close()
    del sourceFontWithTables

    autohintOptions = getExtensionDefault(settingsIdentifier, defaultOptions)
    result = TTFAutohint(tempDest, dest, autohintOptions)
    report.writeItems(result)

    os.remove(temp)
    os.remove(tempDest)
    def __init__(self):

        self.w = FloatingWindow((300, 510), "Outline Palette")

        y = 5
        middle = 135
        textMiddle = middle - 27
        y += 10
        self.w._tickness = TextBox((0, y-3, textMiddle, 17), 'Thickness:', alignment="right")

        ticknessValue = getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "thickness"), 10)

        self.w.tickness = Slider((middle, y, -50, 15),
                                 minValue=1,
                                 maxValue=200,
                                 callback=self.parametersChanged,
                                 value=ticknessValue)
        self.w.ticknessText = EditText((-40, y, -10, 17), ticknessValue,
                                       callback=self.parametersTextChanged,
                                       sizeStyle="small")
        y += 33
        self.w._contrast = TextBox((0, y-3, textMiddle, 17), 'Contrast:', alignment="right")

        contrastValue = getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "contrast"), 0)

        self.w.contrast = Slider((middle, y, -50, 15),
                                 minValue=0,
                                 maxValue=200,
                                 callback=self.parametersChanged,
                                 value=contrastValue)
        self.w.contrastText = EditText((-40, y, -10, 17), contrastValue,
                                       callback=self.parametersTextChanged,
                                       sizeStyle="small")
        y += 33
        self.w._contrastAngle = TextBox((0, y-3, textMiddle, 17), 'Contrast Angle:', alignment="right")

        contrastAngleValue = getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "contrastAngle"), 0)

        self.w.contrastAngle = Slider((middle, y-10, 30, 30),
                                 minValue=0,
                                 maxValue=360,
                                 callback=self.contrastAngleCallback,
                                 value=contrastValue)
        self.w.contrastAngle.getNSSlider().cell().setSliderType_(NSCircularSlider)
        self.w.contrastAngleText = EditText((-40, y, -10, 17), contrastAngleValue,
                                       callback=self.parametersTextChanged,
                                       sizeStyle="small")

        y += 33

        self.w._miterLimit = TextBox((0, y-3, textMiddle, 17), 'MiterLimit:', alignment="right")

        connectmiterLimitValue = getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "connectmiterLimit"), True)

        self.w.connectmiterLimit = CheckBox((middle-22, y-3, 20, 17), "",
                                             callback=self.connectmiterLimit,
                                             value=connectmiterLimitValue)

        miterLimitValue = getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "miterLimit"), 10)

        self.w.miterLimit = Slider((middle, y, -50, 15),
                                    minValue=1,
                                    maxValue=200,
                                    callback=self.parametersChanged,
                                    value=miterLimitValue)
        self.w.miterLimitText = EditText((-40, y, -10, 17), miterLimitValue,
                                          callback=self.parametersTextChanged,
                                          sizeStyle="small")

        self.w.miterLimit.enable(not connectmiterLimitValue)
        self.w.miterLimitText.enable(not connectmiterLimitValue)

        y += 30

        cornerAndCap = ["Square", "Round", "Butt"]

        self.w._corner = TextBox((0, y, textMiddle, 17), 'Corner:', alignment="right")
        self.w.corner = PopUpButton((middle-2, y-2, -48, 22), cornerAndCap, callback=self.parametersTextChanged)

        y += 30

        self.w._cap = TextBox((0, y, textMiddle, 17), 'Cap:', alignment="right")
        useCapValue = getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "closeOpenPath"), False)
        self.w.useCap = CheckBox((middle-22, y, 20, 17), "",
                                             callback=self.useCapCallback,
                                             value=useCapValue)
        self.w.cap = PopUpButton((middle-2, y-2, -48, 22), cornerAndCap, callback=self.parametersTextChanged)
        self.w.cap.enable(useCapValue)

        cornerValue = getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "corner"), "Square")
        if cornerValue in cornerAndCap:
            self.w.corner.set(cornerAndCap.index(cornerValue))

        capValue = getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "cap"), "Square")
        if capValue in cornerAndCap:
            self.w.cap.set(cornerAndCap.index(capValue))

        y += 33

        self.w.keepBounds = CheckBox((middle-3, y, middle, 22), "Keep Bounds",
                                   value=getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "keepBounds"), False),
                                   callback=self.parametersTextChanged)
        y += 30
        self.w.optimizeCurve = CheckBox((middle-3, y, middle, 22), "Optimize Curve",
                                   value=getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "optimizeCurve"), False),
                                   callback=self.parametersTextChanged)
        y += 30                           
        self.w.addOriginal = CheckBox((middle-3, y, middle, 22), "Add Source",
                                   value=getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "addOriginal"), False),
                                   callback=self.parametersTextChanged)
        y += 30
        self.w.addInner = CheckBox((middle-3, y, middle, 22), "Add Left",
                                   value=getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "addLeft"), True),
                                   callback=self.parametersTextChanged)
        y += 30
        self.w.addOuter = CheckBox((middle-3, y, middle, 22), "Add Right",
                                   value=getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "addRight"), True),
                                   callback=self.parametersTextChanged)

        y += 35

        self.w.preview = CheckBox((middle-3, y, middle, 22), "Preview",
                               value=getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "preview"), True),
                               callback=self.previewCallback)
        y += 30
        self.w.fill = CheckBox((middle-3+10, y, middle, 22), "Fill",
                               value=getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "fill"), False),
                               callback=self.fillCallback, sizeStyle="small")
        y += 25
        self.w.stroke = CheckBox((middle-3+10, y, middle, 22), "Stroke",
                               value=getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "stroke"), True),
                               callback=self.strokeCallback, sizeStyle="small")

        color = NSColor.colorWithCalibratedRed_green_blue_alpha_(0, 1, 1, .8)

        self.w.color = ColorWell(((middle-5)*1.7, y-33, -10, 60),
                                 color=getExtensionDefaultColor("%s.%s" % (outlinePaletteDefaultKey, "color"), color),
                                 callback=self.colorCallback)

        self.previewCallback(self.w.preview)

        self.w.apply = Button((-70, -55, -10, 22), "Expand", self.expand, sizeStyle="small")
        self.w.applyNewFont = Button((-190, -55, -80, 22), "Expand Selection", self.expandSelection, sizeStyle="small")
        self.w.applySelection = Button((-290, -55, -200, 22), "Expand Font", self.expandFont, sizeStyle="small")

        self.w.preserveComponents = CheckBox((10, -25, -10, 22), "Preserve Components", sizeStyle="small",
                                value=getExtensionDefault("%s.%s" % (outlinePaletteDefaultKey, "preserveComponents"), False),
                                callback=self.parametersTextChanged)
        self.setUpBaseWindowBehavior()

        addObserver(self, "drawOutline", "drawBackground")
        self.parametersTextChanged
        self.w.open()
 def load(self):
     self.fillColor = getExtensionDefaultColor(_fillColorDefaultKey, self._fallBackFillColor)
     self.strokeColor = getExtensionDefaultColor(_strokeColorDefaultKey, self._fallBackStrokeColor)
     self.showPreview = getExtensionDefault(_showPreviewDefaultKey, self._fallbackShowPreview)
     self.data = getExtensionDefault(_dataDefaultKey, self._fallbackData)
Esempio n. 58
0
 def __init__(self):
     
     # Preferences
     self._drawing = getExtensionDefault(self.DEFAULTKEY_DRAW, True)
     self._fill = getExtensionDefault(self.DEFAULTKEY_FILL, True)
     self._stroke = getExtensionDefault(self.DEFAULTKEY_STROKE, True)
     self._points = getExtensionDefault(self.DEFAULTKEY_POINTS, True)
     
     self._fillColor = getExtensionDefaultColor(self.DEFAULTKEY_FILLCOLOR, self.FALLBACK_FILLCOLOR)
     self._strokeColor = getExtensionDefaultColor(self.DEFAULTKEY_STROKECOLOR, self.FALLBACK_STROKECOLOR)
     self._pointsColor = getExtensionDefaultColor(self.DEFAULTKEY_POINTSCOLOR, self.FALLBACK_POINTSCOLOR)
     
     self._alignment = getExtensionDefault(self.DEFAULTKEY_ALIGNMENT, 0)
     self._kerning = getExtensionDefault(self.DEFAULTKEY_KERNING, 1)
     self._floating = getExtensionDefault(self.DEFAULTKEY_FLOATING, 1)
     
     # User preferences
     self._onCurvePointsSize = getDefault("glyphViewOncurvePointsSize") # typo, should be: OnCurve
     self._offCurvePointsSize = getDefault("glyphViewOffCurvePointsSize")
     self._strokeWidth = getDefault("glyphViewStrokeWidth")
     
     w, h = 400, 195
     x = y = 10
     
     self.initAllFonts()
     
     self.w = FloatingWindow((w, h), "Overlay UFOs")
     self.w.draw = CheckBox((x, y, 95, 18), "Draw", callback=self.drawCallback, value=self._drawing, sizeStyle="small")
     x += 60
     self.w.fill = CheckBox((x, y, 95, 18), "Fill", callback=self.fillCallback, value=self._fill, sizeStyle="small")
     x += 40
     self.w.fillColor = ColorWell((x, y, 45, 20), callback=self.fillColorCallback, color=self._fillColor)
     x += 60
     self.w.stroke = CheckBox((x, y, 95, 18), "Stroke", callback=self.strokeCallback, value=self._stroke, sizeStyle="small")
     x += 60
     self.w.strokeColor = ColorWell((x, y, 45, 20), callback=self.strokeColorCallback, color=self._strokeColor)
     x += 60
     self.w.points = CheckBox((x, y, 95, 18), "Points", callback=self.pointsCallback, value=self._points, sizeStyle="small")
     x += 60
     self.w.pointsColor = ColorWell((x, y, 45, 20), callback=self.pointsColorCallback, color=self._pointsColor)
     x, y = 10, 40
     self.w.alignText = TextBox((x, y, 250, 15), "Alignment:", sizeStyle="small")
     y += 18
     self.w.alignment = RadioGroup((x, y, 80, 55), ['Left', 'Center', 'Right'], isVertical=True, callback=self.alignmentCallback, sizeStyle="small")
     self.w.alignment.set(self._alignment)
     y += 62
     self.w.kerning = CheckBox((x, y, 100, 10), "Show kerning", callback=self.kerningCallback, value=self._kerning, sizeStyle="mini")
     y += 18
     self.w.floating = CheckBox((x, y, 100, 10), "Floating Window", callback=self.floatingCallback, value=self._floating, sizeStyle="mini")
     y += 25
     self.w.resetDefaults = Button((x, y, 85, 14), "Reset settings", callback=self.resetSettingsCallback, sizeStyle="mini")
     x, y = 110, 40
     self.w.fontList = List((x, y, 240, 55), self.getFontItems(), 
         columnDescriptions=self.getListDescriptor(), showColumnTitles=False,
         selectionCallback=None, doubleClickCallback=self.fontListCallback,
         allowsMultipleSelection=True, allowsEmptySelection=True,
         drawVerticalLines=False, drawHorizontalLines=True,
         drawFocusRing=False, rowHeight=16
     )
     y += 55
     self.w.hiddenFontList = List((x, y, 240, 55), self.getHiddenFontItems(), 
         columnDescriptions=self.getListDescriptor(), showColumnTitles=False,
         selectionCallback=None, doubleClickCallback=self.hiddenFontListCallback,
         allowsMultipleSelection=True, allowsEmptySelection=True,
         drawVerticalLines=False, drawHorizontalLines=True,
         drawFocusRing=False, rowHeight=16
     )
     self._selectionChanging = False
     self.w.fontList.setSelection([]) # unselect
     y += 65
     self.w.contextLeft = EditText((x, y, 90, 20), callback=self.contextCallback, continuous=True, placeholder="Left", sizeStyle="small")
     self.w.contextCurrent = EditText((x+95, y, 50, 20), callback=self.contextCallback, continuous=True, placeholder="?", sizeStyle="small")
     self.w.contextRight = EditText((x+150, y, 90, 20), callback=self.contextCallback, continuous=True, placeholder="Right", sizeStyle="small")
     x, y = 360, 100
     self.w.addFonts = Button((x, y, 30, 20), "+", callback=self.addHiddenFontsCallback, sizeStyle="regular")
     y += 25
     self.w.removeFonts = Button((x, y, 30, 20), unichr(8722), callback=self.removeHiddenFontsCallback, sizeStyle="regular")
             
     # Observers
     addObserver(self, "fontDidOpen", "fontDidOpen")
     addObserver(self, "fontWillClose", "fontWillClose") # fontDidClose?
     addObserver(self, "draw", "drawInactive")
     addObserver(self, "draw", "draw")
     
     # Prepare and open window
     self.setWindowLevel()
     self.setUpBaseWindowBehavior()
     self.w.open()
Esempio n. 59
0
    def __init__(self):
        
        self.w = FloatingWindow((270, 340), "Outline Palette")
        
        y = 5
        middle = 110
        textMiddle = middle - 27
        y += 10
        self.w._tickness = TextBox((0, y-3, textMiddle, 17), 'Thickness:', alignment="right")
        
        ticknessValue = getExtensionDefault("%s.%s" %(outlinePaletteDefaultKey, "thickness"), 10)
        
        self.w.tickness = Slider((middle, y, -50, 15), 
                                 minValue=1, 
                                 maxValue=200, 
                                 callback=self.parametersChanged, 
                                 value=ticknessValue)
        self.w.ticknessText = EditText((-40, y, -10, 17), ticknessValue, 
                                       callback=self.parametersTextChanged, 
                                       sizeStyle="small")
        
        y += 33
        
        self.w._miterLimit = TextBox((0, y-3, textMiddle, 17), 'MiterLimit:', alignment="right")
        
        connectmiterLimitValue = getExtensionDefault("%s.%s" %(outlinePaletteDefaultKey, "connectmiterLimit"), True)
        
        self.w.connectmiterLimit = CheckBox((middle-22, y-3, 20, 17), "", 
                                             callback=self.connectmiterLimit, 
                                             value=connectmiterLimitValue)
        
        miterLimitValue = getExtensionDefault("%s.%s" %(outlinePaletteDefaultKey, "miterLimit"), 10)
        
        self.w.miterLimit = Slider((middle, y, -50, 15), 
                                    minValue=1, 
                                    maxValue=200, 
                                    callback=self.parametersChanged, 
                                    value=miterLimitValue)
        self.w.miterLimitText = EditText((-40, y, -10, 17), miterLimitValue, 
                                          callback=self.parametersTextChanged, 
                                          sizeStyle="small")
        
        self.w.miterLimit.enable(not connectmiterLimitValue)
        self.w.miterLimitText.enable(not connectmiterLimitValue)
        
        y += 30
        
        cornerAndCap = ["Square", "Round", "Butt"]
        
        self.w._corner = TextBox((0, y, textMiddle, 17), 'Corner:', alignment="right")
        self.w.corner = PopUpButton((middle-2, y-2, -48, 22), cornerAndCap, callback=self.parametersTextChanged)        
        
        y += 30
        
        self.w._cap = TextBox((0, y, textMiddle, 17), 'Cap:', alignment="right")
        useCapValue = getExtensionDefault("%s.%s" %(outlinePaletteDefaultKey, "closeOpenPath"), False)
        self.w.useCap = CheckBox((middle-22, y, 20, 17), "", 
                                             callback=self.useCapCallback, 
                                             value=useCapValue)
        self.w.cap = PopUpButton((middle-2, y-2, -48, 22), cornerAndCap, callback=self.parametersTextChanged) 
        self.w.cap.enable(useCapValue)       
        
        cornerValue = getExtensionDefault("%s.%s" %(outlinePaletteDefaultKey, "corner"), "Square")
        if cornerValue in cornerAndCap:
            self.w.corner.set(cornerAndCap.index(cornerValue))
        
        capValue = getExtensionDefault("%s.%s" %(outlinePaletteDefaultKey, "cap"), "Square")
        if capValue in cornerAndCap:
            self.w.cap.set(cornerAndCap.index(capValue))
            
        y += 33
        
        self.w.addOriginal = CheckBox((middle-3, y, middle, 22), "Add Source", 
                                      value=getExtensionDefault("%s.%s" %(outlinePaletteDefaultKey, "addOriginal"), False), 
                                      callback=self.parametersTextChanged)
        y += 30
        self.w.addInner = CheckBox((middle-3, y, middle, 22), "Add Left", 
                                   value=getExtensionDefault("%s.%s" %(outlinePaletteDefaultKey, "addLeft"), True), 
                                   callback=self.parametersTextChanged)
        y += 30
        self.w.addOuter = CheckBox((middle-3, y, middle, 22), "Add Right", 
                                   value=getExtensionDefault("%s.%s" %(outlinePaletteDefaultKey, "addRight"), True), 
                                   callback=self.parametersTextChanged)
        
        y += 35
        
        
        
        
        self.w.fill = CheckBox((middle-3, y, middle, 22), "Fill", 
                               value=getExtensionDefault("%s.%s" %(outlinePaletteDefaultKey, "fill"), False), 
                               callback=self.fillCallback)
        y += 30
        self.w.stroke = CheckBox((middle-3, y, middle, 22), "Stroke", 
                               value=getExtensionDefault("%s.%s" %(outlinePaletteDefaultKey, "stroke"), True), 
                               callback=self.strokeCallback)
        
        color = NSColor.colorWithCalibratedRed_green_blue_alpha_(0, 1, 1, .8)

        self.w.color = ColorWell(((middle-5)*1.7, y-33, -10, 60), 
                                 color=getExtensionDefaultColor("%s.%s" %(outlinePaletteDefaultKey, "color"), color),
                                 callback=self.colorCallback)
        
        self.w.apply = Button((-100, -30, -10, 22), "Expand", self.expand)
        self.w.applyAll = Button((-220, -30, -110, 22), "Expand Font", self.expandFont)
        self.setUpBaseWindowBehavior()
        
        addObserver(self, "drawOutline", "drawBackground")
        self.parametersTextChanged
        self.w.open()