# menuTitle : move from importlib import reload import hTools3.dialogs.glyphs.move reload(hTools3.dialogs.glyphs.move) from mojo.roboFont import OpenWindow from hTools3.dialogs.glyphs.move import MoveGlyphsDialog OpenWindow(MoveGlyphsDialog)
if isQuad: curveConverter.quadratic2bezier(defconGlyph) outline = self.calculate(glyph, preserveComponents) glyph.clearContours() outline.drawPoints(glyph.getPointPen()) if isQuad: curveConverter.bezier2quadratic(defconGlyph) glyph.round() glyph.performUndo() def expandSelection(self, sender): font = CurrentFont() preserveComponents = bool(self.w.preserveComponents.get()) selection = font.selection for glyphName in selection: glyph = font[glyphName] self.expandGlyph(glyph, preserveComponents) def expandFont(self, sender): font = CurrentFont() preserveComponents = bool(self.w.preserveComponents.get()) for glyph in font: self.expandGlyph(glyph, preserveComponents) OpenWindow(OutlinerPalette)
def alignCallback(self, sender): """ Change the alignment status """ postEvent(f"{DEFAULTKEY}.alignmentDidChange") def contextEditCallback(self, sender): postEvent(f"{DEFAULTKEY}.contextDidChange", position=sender.title) if __name__ == "__main__": if DEBUG_MODE: testFontsFolder = Path.home() / "Desktop/mutatorSans" for eachFontPath in [ ff for ff in testFontsFolder.iterdir() if ff.suffix == ".ufo" ]: OpenFont(eachFontPath, showInterface=True) try: OpenWindow(OverlayUFOs) except Exception as error: for eachFont in AllFonts(): eachFont.close() raise error else: OpenWindow(OverlayUFOs)
if isinstance(data, memoryview): data = data.tobytes() return data def _getImageForView(self, view): rect = view.bounds() rep = view.bitmapImageRepForCachingDisplayInRect_(rect) view.cacheDisplayInRect_toBitmapImageRep_(rect, rep) scrollbarSizeX = scrollbarSizeY = 0 if view.hasHorizontalScroller(): scrollbarSizeX = 16 if view.hasVerticalScroller(): scrollbarSizeY = 16 width, height = rect.size im = NSImage.alloc().initWithSize_( (width - scrollbarSizeX, height - scrollbarSizeY)) (x, y), (w, h) = rect im.lockFocus() rep.drawAtPoint_((-x, -rect.size.height + y + h - scrollbarSizeY)) im.unlockFocus() rep = NSBitmapImageRep.imageRepWithData_(im.TIFFRepresentation()) return rep.representationUsingType_properties_(NSPNGFileType, None) OpenWindow(Post2Twitter)
# menuTitle : clear data from importlib import reload import hTools3.dialogs.batch.clear reload(hTools3.dialogs.batch.clear) from mojo.roboFont import OpenWindow from hTools3.dialogs.batch.clear import BatchClearDialog OpenWindow(BatchClearDialog)
from mojo.roboFont import OpenWindow from roboHUD.settingsWindow import RoboHUDSettingsWindowController OpenWindow(RoboHUDSettingsWindowController)
self.addGlyphName() elif v == 1: # remove self.delGlyphName() elif v == 2: # import self.importGlyphNames() elif v == 3: # export self.exportGlyphNames() def okCallback(self, sender): RamsayStData.setItems(self.w.dataList) RamsayStData.save() self.updateView() def closeCallback(self, sender): self.w.close() def dataListEditCallback(self, sender): sel = sender.getSelection() for i in sel: item = sender[i] RamsayStData.set(item) def updateView(self): UpdateCurrentGlyphView() OpenWindow(RamsayStSettingsWindowController)
# menuTitle : set style data from importlib import reload import hTools3.dialogs.batch.setStyleData reload(hTools3.dialogs.batch.setStyleData) from mojo.roboFont import OpenWindow from hTools3.dialogs.batch.setStyleData import BatchSetStyleDataDialog OpenWindow(BatchSetStyleDataDialog)
# menuTitle : copy margins from importlib import reload import hTools3.dialogs.glyphs.marginsCopy reload(hTools3.dialogs.glyphs.marginsCopy) from mojo.roboFont import OpenWindow from hTools3.dialogs.glyphs.marginsCopy import CopyMarginsDialog OpenWindow(CopyMarginsDialog)
# menuTitle : create anchors from importlib import reload import hTools3.dialogs.glyphs.anchorsCreate reload(hTools3.dialogs.glyphs.anchorsCreate) from mojo.roboFont import OpenWindow from hTools3.dialogs.glyphs.anchorsCreate import CreateAnchorsDialog OpenWindow(CreateAnchorsDialog)
# menuTitle: set glyph order from importlib import reload import hTools3.dialogs.font.setGlyphOrder reload(hTools3.dialogs.font.setGlyphOrder) from mojo.roboFont import OpenWindow from hTools3.dialogs.font.setGlyphOrder import SetGlyphOrderDialog OpenWindow(SetGlyphOrderDialog)
# menuTitle : prefix suffix from importlib import reload import hTools3.dialogs.glyphs.namesSuffix reload(hTools3.dialogs.glyphs.namesSuffix) from mojo.roboFont import OpenWindow from hTools3.dialogs.glyphs.namesSuffix import PrefixSuffixGlyphNamesDialog OpenWindow(PrefixSuffixGlyphNamesDialog)
# menuTitle : import from importlib import reload import hTools3.dialogs.glyphs.layersImport reload(hTools3.dialogs.glyphs.layersImport) from mojo.roboFont import OpenWindow from hTools3.dialogs.glyphs.layersImport import ImportGlyphsIntoLayerDialog OpenWindow(ImportGlyphsIntoLayerDialog)
# menuTitle : rotate from importlib import reload import hTools3.dialogs.glyphs.rotate reload(hTools3.dialogs.glyphs.rotate) from mojo.roboFont import OpenWindow from hTools3.dialogs.glyphs.rotate import RotateGlyphsDialog OpenWindow(RotateGlyphsDialog)
# Make a new vanilla "sheet" with controls for editing the name of the theme self.nameSheet = vanilla.Sheet((200, 110), self.w) self.nameSheet.editingIndex = index self.nameSheet.nameTitle = vanilla.TextBox((10, 10, -10, 25), "Theme Name:") self.nameSheet.name = vanilla.EditText((10, 35, -10, 25), name) self.nameSheet.cancelButton = vanilla.Button( (10, -35, 95, 25), "Cancel", callback=self.editSheetClose) self.nameSheet.okButton = vanilla.Button( (115, -35, -10, 25), "OK", callback=self.editSheetOKCallback) self.nameSheet.open() def editSheetClose(self, sender): # Callback to close the sheet if self.nameSheet: self.nameSheet.close() self.nameSheet = None def editSheetOKCallback(self, sender): # Callback when clicking "OK" in the Edit Name sheet if self.nameSheet: themeIndex = self.nameSheet.editingIndex newName = self.nameSheet.name.get() self.themes[themeIndex]["themeName"] = newName self.rebuildThemeList() self.w.themeList.setSelection([themeIndex]) self.editSheetClose(None) OpenWindow(ThemeManager)
# menuTitle : set data from importlib import reload import hTools3.dialogs.batch.set reload(hTools3.dialogs.batch.set) from mojo.roboFont import OpenWindow from hTools3.dialogs.batch.set import BatchSetDialog OpenWindow(BatchSetDialog)
# menuTitle : mask from importlib import reload import hTools3.dialogs.glyphs.layersMask reload(hTools3.dialogs.glyphs.layersMask) from mojo.roboFont import OpenWindow from hTools3.dialogs.glyphs.layersMask import MaskDialog OpenWindow(MaskDialog)
# menuTitle : set margins from importlib import reload import hTools3.dialogs.glyphs.marginsSet reload(hTools3.dialogs.glyphs.marginsSet) from mojo.roboFont import OpenWindow from hTools3.dialogs.glyphs.marginsSet import SetMarginsDialog OpenWindow(SetMarginsDialog)
# menuTitle : find replace from importlib import reload import hTools3.dialogs.glyphs.namesFindReplace reload(hTools3.dialogs.glyphs.namesFindReplace) from mojo.roboFont import OpenWindow from hTools3.dialogs.glyphs.namesFindReplace import FindReplaceGlyphNamesDialog OpenWindow(FindReplaceGlyphNamesDialog)
"com.typemytype.GlyphXMLViewer") self.w.xml.set(xml) def currentGlyphChanged(self, info): glyph = CurrentGlyph() if glyph == self.currentGlyph: return self._unsubscribeGlyph() if glyph is not None: self.subscribeGlyph(glyph) self.currentGlyph = glyph self.setXML() else: self.w.xml.set("") def _unsubscribeGlyph(self): if self.currentGlyph is not None: self.currentGlyph.removeObserver(self, "Glyph.Changed") self.currentGlyph = None def subscribeGlyph(self, glyph): if glyph is not None: glyph.addObserver(self, "_glyphChanged", "Glyph.Changed") def _glyphChanged(self, notification): self.setXML() OpenWindow(GlyphXMLViewer)
from mojo.roboFont import OpenWindow from robosounds import RoboSoundsWindowController OpenWindow(RoboSoundsWindowController)
# menuTitle : lock widths from importlib import reload import hTools3.dialogs.glyphs.layersLock reload(hTools3.dialogs.glyphs.layersLock) from mojo.roboFont import OpenWindow from hTools3.dialogs.glyphs.layersLock import LockLayerWidthsDialog OpenWindow(LockLayerWidthsDialog)
from mojo.roboFont import OpenWindow from mechanic2.ui.controller import MechanicController OpenWindow(MechanicController)
# menuTitle : clear data from importlib import reload import hTools3.dialogs.font.clearData reload(hTools3.dialogs.font.clearData) from mojo.roboFont import OpenWindow from hTools3.dialogs.font.clearData import ClearFontDataDialog OpenWindow(ClearFontDataDialog)
from importlib import reload import groupSpacingDialog reload(groupSpacingDialog) from mojo.roboFont import OpenWindow from groupSpacingDialog import GroupSpacingWindow OpenWindow(GroupSpacingWindow)
# menuTitle : find & replace from importlib import reload import hTools3.dialogs.batch.findReplace reload(hTools3.dialogs.batch.findReplace) from mojo.roboFont import OpenWindow from hTools3.dialogs.batch.findReplace import BatchFindReplaceDialog OpenWindow(BatchFindReplaceDialog)
# menuTitle : copy width from importlib import reload import hTools3.dialogs.glyphs.widthCopy reload(hTools3.dialogs.glyphs.widthCopy) from mojo.roboFont import OpenWindow from hTools3.dialogs.glyphs.widthCopy import CopyWidthDialog OpenWindow(CopyWidthDialog)
txt = "" maxLenght = 25 for name, pick in result: whiteSpace = maxLenght-len(name) txt += "%s%s%s\n" %(name, " "*whiteSpace, pick["name"]) now = datetime.now() txt += "\n\n%s" %(now.strftime("%A %d, %B %Y %H:%M")) txt += "\n%s" %self.title self.w.output.set(txt) textView = self.w.output.getNSTextView() textStorage = textView.textStorage() for name, pick in result: url = pick.get("url") if url: r = (txt.find(name)+maxLenght, len(pick["name"])) if not url.startswith("http://"): url = "http://typecooker.com/" + url textStorage.addAttribute_value_range_(NSLinkAttributeName, url, r) url = "http://typecooker.com/" r = (len(txt)-len(self.title), len(self.title)) textStorage.addAttribute_value_range_(NSLinkAttributeName, url, r) OpenWindow(TypeCookerWindow)
if self.g3.listOutput.get() == True: joinString = "\\n" self.outputWords = self.sortWordsByWidth(self.outputWords) outputString = joinString.join(self.outputWords) try: sp = OpenSpaceCenter(CurrentFont()) sp.setRaw(outputString) except: if warned == False: Message( "word-o-mat: No open fonts found; words will be displayed in the Output Window." ) warned = True print "word-o-mat:", outputString else: print "word-o-mat: Aborted because of errors" def fontClosed(self, info): """Check if there are any fonts left open, otherwise disable relevant UI controls.""" if len(AllFonts()) <= 1: self.g1.base.set(0) # use any characters self.g1.base.enable(False) def windowClose(self, sender): """Remove observers when the extension window is closed.""" removeObserver(self, "fontDidOpen") removeObserver(self, "fontWillClose") OpenWindow(WordomatWindow)
t = sender.tag f = CurrentFont() if f is None: return names = self.getSelection() copyable = "" if t == "names": copyable = self._asSpacedNames(names) elif t == "comma": copyable = self._asQuotesAndCommasNames(names) elif t == "slash": copyable = self._asSlashedNames(names) elif t == "feature": copyable = self._asFeatureGroup(names) elif t == "unicode": copyable = self._asUnicodeText(names) self._toPasteBoard(copyable) self.w.caption.set("%d names to clipboard!" % (len(names))) def _toPasteBoard(self, text): pb = NSPasteboard.generalPasteboard() pb.clearContents() pb.declareTypes_owner_([ NSPasteboardTypeString, ], None) pb.setString_forType_(text, NSPasteboardTypeString) if __name__ == "__main__": OpenWindow(NameCopier)