def showThisGlyphInSC_CB(self, sender):
     if CurrentSpaceCenter() is None:
         spaceCenter = OpenSpaceCenter(self.glyph.font)
         spaceCenter.set([self.glyphBelowName])
     else:
         scGlyphs = CurrentSpaceCenter().get()
         spaceCenter = OpenSpaceCenter(self.glyph.font)
         spaceCenter.set(scGlyphs + [self.glyphBelowName])
예제 #2
0
def OpenRoboFontProject(path):
    root = os.path.dirname(path)
    project = readPlist(path)

    documentController = NSDocumentController.sharedDocumentController()
    delegate = NSApp().delegate()

    openFileNames = [window.representedFilename() for window in NSApp().windows()]

    for fileName, data in project["documents"].items():

        isUntitled = fileName == "untitled"

        if not isUntitled:
            if not os.path.exists(fileName):
                fileName = os.path.abspath(os.path.join(root, fileName))

            if not os.path.exists(fileName):
                continue

            if fileName in openFileNames:
                continue

        data.sort(key=lambda item: item.get("name") != "FontWindow")

        for windowData in data:
            name = windowData["windowName"]
            x, y, w, h = windowData["frame"]

            if isUntitled:
                if name == "FontWindow":
                    RFont()
                elif name == "ScriptingWindow":
                    delegate.scriptingWindow_(None)
                elif name == "FeatureWindow":
                    delegate.newFeature_(None)

            else:
                url = NSURL.fileURLWithPath_(fileName)
                doc, error = documentController.openDocumentWithContentsOfURL_display_error_(url, True, None)
                if error:
                    delegate.application_openFile_(NSApp(), fileName)

            window = NSApp().mainWindow()

            vanillaWrapper = None
            if hasattr(window.delegate(), "vanillaWrapper"):
                vanillaWrapper = window.delegate().vanillaWrapper()

            if vanillaWrapper:
                font = CurrentFont()
                if name == "GlyphWindow":
                    window = OpenGlyphWindow(font[windowData["glyphName"]], newWindow=True)
                    window.w.getNSWindow().setFrame_display_animate_(((x, y), (w, h)), True, False)
                    continue

                elif name == "SpaceCenter":
                    spaceCenter = OpenSpaceCenter(font)
                    spaceCenter.setPointSize(windowData["pointSize"])
                    spaceCenter.setPre(windowData["pre"])
                    spaceCenter.setAfter(windowData["after"])
                    spaceCenter.set(windowData["input"])

                    window = CurrentSpaceCenterWindow()
                    window.w.getNSWindow().setFrame_display_animate_(((x, y), (w, h)), True, False)
                    continue

            window.setFrame_display_animate_(((x, y), (w, h)), True, False)

    for windowData in project["toolWindows"]:
        name = windowData["windowName"]
        x, y, w, h = windowData["frame"]

        if name == "DebugWindow":
            window = OutputWindow()
            window.show()
            window.w.getNSWindow().setFrame_display_animate_(((x, y), (w, h)), True, False)

        elif name == "InspectorWindow":
            try:
                # a little bit hacky
                # will move to mojo.UI in the upcoming releases
                window = delegate._inspectorWindow.w.getNSWindow()
            except:
                window = None
            if window is None:
                delegate.openInspector_(None)
                window = delegate._inspectorWindow.w.getNSWindow()
            window.setFrame_display_animate_(((x, y), (w, h)), True, False)

    if "execute" in project:
        try:
            ScriptRunner(text=project["execute"])
        except:
            import traceback
            print traceback.format_exc(5)
예제 #3
0
class SpaceCenterKerning(object):

    """class for SpaceCenterKerning"""

    def __init__(self):

        self.font = CurrentFont()
        self.spaceCenter = None
        if self.font:
            addObserver(self, 'SpaceCenterObserver', 'spaceCenterDidOpen')
            self.spaceCenter = OpenSpaceCenter(self.font, newWindow=True)

            # addObserver(self, None, 'spaceCenterDraw')
            addObserver(self, 'pressedKey', 'spaceCenterKeyDown')
            addObserver(self, 'closeSpaceCenter', 'spaceCenterWillClose')

            # get kerning from CurrentFont and build text list
            self.pairsTextCheck = []
            self.kKeys = self.getKerningPairsRef(self.font)
            # get reference pairs for flipping
            self.refPairs = [pair[0] for pair in self.kKeys]

            for key, gkey in self.kKeys:
                self.pairsTextCheck.append(self.returnPattern(key))

            # index of text
            self.i = 0
            self.maxi = len(self.kKeys)

            self.spaceCenter.set(self.pairsTextCheck[self.i])

        else:
            message('You need to open a font first!')

    def SpaceCenterObserver(self, info):
        if self.spaceCenter:
            self.spaceCenter.set(self.pairsTextCheck[self.i])
            self.updateSpaceCenter()

    def pressedKey(self, info):
        event = info['event']
        pair = self.kKeys[self.i][1]
        keyCode = event.keyCode()

        # modifier key? alt, shift, None
        if event.modifierFlags() == 11010336:
            kIncrement = 1
        elif event.modifierFlags() == 10617090:
            kIncrement = 5
        else:
            kIncrement = 10

        # down, up, left, right keyCodes
        if keyCode == 125:
            self.i += 1
        elif keyCode == 126:
            self.i -= 1
        elif keyCode == 123:
            self.font.kerning[pair] -= kIncrement
        elif keyCode == 124:
            self.font.kerning[pair] += kIncrement
        # flip pair: command-shift-f
        elif event.modifierFlags() == 1179914 and keyCode == 3:
            # print 'command-shift-f hit!'
            refPair = self.kKeys[self.i][0]
            flippedPair = refPair[1], refPair[0]
            if flippedPair in self.refPairs:
                self.i = self.refPairs.index(flippedPair)
            else:
                print 'Flipped pair (%s, %s) has no kern value' % refPair

        # reset if self.i is out of range
        if self.i == self.maxi or self.i == -self.maxi:
            self.i = 0

        self.spaceCenter.set(self.pairsTextCheck[self.i])

    def getKerningPairsRef(self, font):
        """use only the main glyph from kerning group and keep the reference"""
        kerningRef = font.kerning.keys()[:]

        for k in kerningRef:
            left, right = k

            if left in font.groups:
                groupGlyphs = font.groups[left]
                groupGlyphs.sort()
                # get first glyphname in the group
                leftRef = groupGlyphs[0]
            else:
                leftRef = left

            if right in font.groups:
                groupGlyphs = font.groups[right]
                groupGlyphs.sort()
                # get first glyphname in the group
                rightRef = groupGlyphs[0]
            else:
                rightRef = right

            i = kerningRef.index(k)
            kerningRef[i] = (leftRef, rightRef), (left, right)

        kerningRef.sort()
        return kerningRef

    def returnPattern(self, pair):
        """returns the pattern for each kerning pair for its use in the SpaceCenter"""
        left, right = pair
        pattern = 'H/O/H/%s/%s/H/O/H/\\n/H/H/H/%s/%s/H/H/H/\\n/O/O/O/%s/%s/o/o/o/\\n/X/H/X/%s/%s/x/o/x' % (
            left, right, left, right, left, right, left, right,)
        return pattern

    def closeSpaceCenter(self, info):
        """remove Observers when closing the custom SpaceCenter"""
        removeObserver(self, 'spaceCenterDidOpen')
        # removeObserver(self, 'spaceCenterDraw')
        removeObserver(self, 'spaceCenterWillClose')
        removeObserver(self, 'spaceCenterKeyDown')
 def openClusterInSpaceCenterCallback(self, sender):
     spaceCenter = OpenSpaceCenter(self.glyph.font)
     spaceCenter.set([glyph.glyph.name for glyph in self.glyphList])