示例#1
0
# 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)
示例#2
0
        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)
示例#3
0
    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)
示例#5
0
# 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)
示例#6
0
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)
示例#8
0
# 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)
示例#10
0
# 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)
示例#13
0
# 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)
示例#14
0
# 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)
示例#15
0
        # 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)
示例#16
0
# 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)
示例#17
0
# 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)
示例#18
0
# 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)
示例#19
0
# 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)
示例#21
0
from mojo.roboFont import OpenWindow
from robosounds import RoboSoundsWindowController

OpenWindow(RoboSoundsWindowController)
示例#22
0
# 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)
示例#23
0
from mojo.roboFont import OpenWindow
from mechanic2.ui.controller import MechanicController

OpenWindow(MechanicController)
示例#24
0
# 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)
示例#25
0
from importlib import reload
import groupSpacingDialog
reload(groupSpacingDialog)

from mojo.roboFont import OpenWindow
from groupSpacingDialog import GroupSpacingWindow

OpenWindow(GroupSpacingWindow)
示例#26
0
# 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)
示例#27
0
# 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)
示例#28
0
        
        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)
示例#29
0
                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)