Beispiel #1
0
    def copyExpr(self):
        font = pFont()

        if self.cmb_mode.currentIndex == 1:
            self.srcGlyphBounds = {
                glyph.name: {
                    layer.name:
                    (glyph.getLSB(layer.name), glyph.getRSB(layer.name),
                     glyph.getAdvance(layer.name))
                    for layer in glyph.masters()
                }
                for glyph in font.pGlyphs()
            }
            print 'COPY MM:\t Font:%s; Glyph Metric Values copied: %s.' % (
                font.name, len(self.srcGlyphBounds.keys()))
        else:
            self.srcGlyphBounds = {
                glyph.name:
                (glyph.getLSB(fixedLayer), glyph.getRSB(fixedLayer),
                 glyph.getAdvance(fixedLayer))
                for glyph in font.pGlyphs()
            }
            print 'COPY:\t Font:%s; Glyph Metric Values copied: %s.' % (
                font.name, len(self.srcGlyphBounds.keys()))

        self.btn_pasteADV.setEnabled(True)
        self.btn_pasteRSB.setEnabled(True)
Beispiel #2
0
    def tag_glyphs(self, mode):
        # - Init
        new_tags = self.edt_tagString.text.replace(' ', '').split(',')

        # - Helper
        def tag(glyph, tagList):
            glyph.setTags(tagList)
            glyph.updateObject(
                glyph.fl, 'Glyph: %s; Add tags: %s ' % (glyph.name, tagList))
            glyph.update()

        # - Process
        if mode == 'G':
            glyph = eGlyph()
            tag(glyph, new_tags)

        else:
            process_glyphs = []

            if mode == 'W':
                process_glyphs = [
                    pGlyph(glyph)
                    for glyph in pWorkspace().getTextBlockGlyphs()
                ]

            elif mode == 'S':
                process_glyphs = pFont().selected_pGlyphs()

            for glyph in process_glyphs:
                tag(glyph, new_tags)

        self.edt_tagString.clear()
Beispiel #3
0
    def __init__(self, parentWidget):
        super(WFontAnchors, self).__init__()

        # - Init
        self.upperWidget = parentWidget
        self.activeFont = pFont()
        self.activeGlyph = pGlyph()
        self.metricData = {
            layer.name: self.activeFont.fontMetrics().asDict(layer.name)
            for layer in self.activeGlyph.masters()
        }

        # - Interface
        self.btn_apply = QtGui.QPushButton('Apply Changes')
        self.btn_reset = QtGui.QPushButton('Reset')
        #self.btn_open = QtGui.QPushButton('Open')
        #self.btn_save = QtGui.QPushButton('Save')

        self.btn_apply.clicked.connect(self.applyChanges)
        self.btn_reset.clicked.connect(self.resetChanges)
        #self.btn_save.clicked.connect(self.exportMetrics)
        #self.btn_open.clicked.connect(self.importMetrics)

        self.tab_fontMetrics = WTableView(self.metricData)

        # - Build
        self.addWidget(self.tab_fontMetrics, 0, 1, 5, 6)
        self.addWidget(self.btn_save, 6, 3, 1, 1)
        self.addWidget(self.btn_open, 6, 4, 1, 1)
    def pasteExpr(self):
        font = pFont()
        dstGlyphs = {glyph.name: glyph for glyph in font.pGlyphs()}

        print 'WARN:\t Pasting Metric expressions to Font:%s;' % font.name
        for glyphName, glyphMetrics in self.srcGlyphBounds.iteritems():
            if glyphName in dstGlyphs:
                wGlyph = dstGlyphs[glyphName]

                if self.cmb_mode.currentIndex == 1:
                    for layer in wGlyph.masters():
                        if glyphMetrics.has_key(layer.name):
                            wGlyph.setLSBeq(glyphMetrics[layer.name][0],
                                            layer.name)
                            wGlyph.setRSBeq(glyphMetrics[layer.name][1],
                                            layer.name)
                            wGlyph.setADVeq(glyphMetrics[layer.name][2],
                                            layer.name)
                            wGlyph.update()
                            print 'PASTE MM:\t Glyph: /%s;\tLayer: %s;\tExp(LSB, RSB, ADV): %s.' % (
                                glyphName, layer.name, glyphMetrics)
                        else:
                            print 'WARN:\t Glyph /%s - Layer %s not found!' % glyphName, layerName
                else:
                    wGlyph.setLSBeq(glyphMetrics[0])
                    wGlyph.setRSBeq(glyphMetrics[1])
                    wGlyph.setADVeq(glyphMetrics[2])
                    wGlyph.update()
                    print 'PASTE:\t Glyph: /%s;\tLayer: %s;\tExp(LSB, RSB, ADV): %s.' % (
                        glyphName, wGlyph.layer().name, glyphMetrics)
            else:
                print 'SKIP:\t Glyph /%s not found.' % glyphName

        fl6.Update(CurrentFont())
Beispiel #5
0
def getProcessGlyphs(mode=0, font=None, workspace=None):
	'''Returns a list of glyphs for processing in TypeRig gui apps

	Args:
		mode (int): 0 - Current active glyph; 1 - All glyphs in current window; 2 - All selected glyphs; 3 - All glyphs in font
		font (fgFont) - Font file (object)
		workspace (flWorkspace) - Workspace
	
	Returns:
		list(eGlyph)
	'''
	# - Dependancies
	from typerig.glyph import eGlyph
	from typerig.proxy import pFont, pWorkspace

	# - Init
	process_glyphs = []
	active_workspace = pWorkspace()
	active_font = pFont(font)
		
	# - Collect process glyphs
	if mode == 0: process_glyphs.append(eGlyph())
	if mode == 1: process_glyphs = [eGlyph(glyph) for glyph in active_workspace.getTextBlockGlyphs()]
	if mode == 2: process_glyphs = active_font.selectedGlyphs(extend=eGlyph) 
	if mode == 3: process_glyphs = active_font.glyphs(extend=eGlyph)
	
	return process_glyphs
    def exportExpr(self):
        font = pFont()
        fontPath = os.path.split(font.fg.path)[0]
        fname = QtGui.QFileDialog.getSaveFileName(
            self, 'Save Metric Expressions to file', fontPath, '*.json')

        if self.cmb_mode.currentIndex == 1:
            expGlyphBounds = {
                glyph.name: {
                    layer.name:
                    (layer.metricsLeft, layer.metricsRight, layer.metricsWidth)
                    for layer in glyph.masters()
                }
                for glyph in font.pGlyphs()
            }
            print 'EXPORT MM:\t Font:%s; Glyph Metric Expressions found: %s.' % (
                font.name, len(expGlyphBounds.keys()))
        else:
            expGlyphBounds = {
                glyph.name: (glyph.layer(fixedLayer).metricsLeft,
                             glyph.layer(fixedLayer).metricsRight,
                             glyph.layer(fixedLayer).metricsWidth)
                for glyph in font.pGlyphs()
            }
            print 'EXPORT:\t Font:%s; Glyph Metric Expressions found: %s.' % (
                font.name, len(expGlyphBounds.keys()))

        with open(fname, 'w') as exportFile:
            json.dump(expGlyphBounds, exportFile)

        print 'SAVE:\t Font:%s; %s Glyph Metric Expressions saved to %s.' % (
            font.name, len(expGlyphBounds.keys()), fname)
    def copyExpr(self):
        font = pFont()

        if self.cmb_mode.currentIndex == 1:
            self.srcGlyphBounds = {
                glyph.name: {
                    layer.name:
                    (layer.metricsLeft, layer.metricsRight, layer.metricsWidth)
                    for layer in glyph.masters()
                }
                for glyph in font.pGlyphs()
            }
            print 'COPY MM:\t Font:%s; Glyph Metric Expressions copied: %s.' % (
                font.name, len(self.srcGlyphBounds.keys()))
        else:
            self.srcGlyphBounds = {
                glyph.name: (glyph.layer(fixedLayer).metricsLeft,
                             glyph.layer(fixedLayer).metricsRight,
                             glyph.layer(fixedLayer).metricsWidth)
                for glyph in font.pGlyphs()
            }
            print 'COPY:\t Font:%s; Glyph Metric Expressions copied: %s.' % (
                font.name, len(self.srcGlyphBounds.keys()))

        self.btn_paste.setEnabled(True)
Beispiel #8
0
    def refresh(self):
        # - Init
        layerBanList = ['#', 'img', 'mask']
        self.workspace = pWorkspace()
        self.activeGlyph = tGlyph()
        self.processGlyphs = [
            tGlyph(glyph) for glyph in self.workspace.getTextBlockGlyphs()
        ]
        self.head.edt_glyphName.setText(', '.join(
            [glyph.name for glyph in self.processGlyphs]))
        self.italic_angle = pFont().getItalicAngle()

        # - TODO: Collect all layers from all glyphs set() them and return only compatible layers
        self.layers = sorted([
            layer.name for layer in self.activeGlyph.layers()
            if all([item not in layer.name for item in layerBanList])
        ])

        self.head.cmb_0.clear()
        self.head.cmb_1.clear()
        self.head.cmb_0.addItems(self.layers)
        self.head.cmb_1.addItems(self.layers)
        self.head.cmb_0.setCurrentIndex(0)
        self.head.cmb_1.setCurrentIndex(0)
        self.axis = []

        self.head.edt_stemV0.setText('1')
        self.head.edt_stemV1.setText('1')
        self.head.edt_stemH0.setText('1')
        self.head.edt_stemH1.setText('1')

        self.mixer.reset()
        self.scalerX.reset()
        self.scalerY.reset()
Beispiel #9
0
    def getNames(self):
        font = pFont()
        selection_names = [glyph.name for glyph in font.selected_pGlyphs()]
        selection_str = '/' + ' /'.join(selection_names)

        print 'SELECTION:\t %s' % selection_str
        clipboard = QtGui.QApplication.clipboard()
        clipboard.setText(selection_str)
Beispiel #10
0
	def preset_reset(self):
		self.builder = None
		self.active_font = pFont()
		self.font_masters = self.active_font.masters()
		
		self.table_dict = self.empty_preset(0)
		self.tab_presets.clear()
		self.tab_presets.setTable(self.table_dict, sortData=(False, False))
		self.tab_presets.horizontalHeader().setStretchLastSection(False)
		self.tab_presets.verticalHeader().hide()
Beispiel #11
0
    def populate(self):
        self.font = pFont()
        self.glyphNames = self.font.getGlyphNameDict()
        self.glyphUnicodes = self.font.getGlyphUnicodeDict(self.defEncoding)

        self.cmb_inputA.clear()
        self.cmb_inputB.clear()
        self.cmb_inputA.addItems(sorted(self.glyphNames.keys()))
        self.cmb_inputB.addItems(sorted(self.glyphNames.keys()))

        print 'DONE:\t Active font glyph names loaded into generator.'
Beispiel #12
0
    def populate_shapes(self):
        self.active_font = pFont()
        self.font_shapes = {}
        for glyph in self.active_font.pGlyphs():
            for shape in glyph.shapes():
                if len(shape.shapeData.name):
                    self.font_shapes.setdefault(shape.shapeData.name,
                                                []).append(glyph.name)

        self.cmb_fontShapes.clear()
        self.cmb_fontShapes.addItems(sorted(self.font_shapes.keys()))
Beispiel #13
0
    def expr_fromFile(self):
        self.active_font = pFont()
        fontPath = os.path.split(self.active_font.fg.path)[0]
        fname = QtGui.QFileDialog.getOpenFileName(
            self.parentWgt, 'Load expressions from file', fontPath)

        if fname != None:
            with open(fname, 'r') as importFile:
                self.txt_editor.setPlainText(importFile.read().decode('utf8'))

            print 'LOAD:\t Font:%s; Expressions loaded from: %s.' % (
                self.active_font.name, fname)
Beispiel #14
0
	def __init__(self, parentWidget):
		super(QCornerControl, self).__init__()
		self.upper_widget = parentWidget

		# - Init
		self.active_font = pFont()
		self.font_masters = self.active_font.masters()
		self.sliders = []
		self.process_glyphs = []

		# - Widgets
		self.__build()
    def importExprFLC(self):
        from typerig.utils import fontClassesFromFile as importFLC

        font = pFont()
        fontPath = os.path.split(font.fg.path)[0]

        fname = QtGui.QFileDialog.getOpenFileName(self,
                                                  'Open Fontlab class file',
                                                  fontPath, '*.flc')

        classesFLC = importFLC(fname)
        print classesFLC.classPosition
Beispiel #16
0
    def expr_toFile(self):
        self.active_font = pFont()
        fontPath = os.path.split(self.active_font.fg.path)[0]
        fname = QtGui.QFileDialog.getSaveFileName(
            self.parentWgt, 'Save expressions from file', fontPath, '*.txt')

        if fname != None:
            with open(fname, 'w') as importFile:
                importFile.writelines(
                    self.txt_editor.toPlainText().encode('utf-8'))

            print 'SAVE:\t Font:%s; Expressions saved to: %s.' % (
                self.active_font.name, fname)
    def importExpr(self):
        font = pFont()
        fontPath = os.path.split(font.fg.path)[0]

        fname = QtGui.QFileDialog.getOpenFileName(
            self, 'Open Metric Expressions from file', fontPath, '*.json')

        with open(fname, 'r') as importFile:
            self.srcGlyphBounds = json.load(importFile)

        print 'LOAD:\t Font:%s; %s Glyph Metric Expressions loaded from %s.' % (
            font.name, len(self.srcGlyphBounds.keys()), fname)
        print 'NOTE:\t Use < Paste Expressions > to apply loaded!'
        self.btn_paste.setEnabled(True)
Beispiel #18
0
    def add_AxisTable(self):
        # - Init
        self.activeFont = pFont()
        self.metricData = {
            layer: {
                'Stem': 0,
                'Location': 0
            }
            for layer in self.activeFont.masters()
        }

        self.tab_fontMetrics = WAxisTable(self.metricData)

        self.axisPlane.addWidget(self.tab_fontMetrics)
Beispiel #19
0
    def exportAnchor(self):
        font = pFont()
        fontPath = os.path.split(font.fg.path)[0]
        fname = QtGui.QFileDialog.getSaveFileName(
            self, 'Save Metric Anchoressions to file', fontPath, '*.json')

        self.copyAnchor()
        print 'EXPORT:\t Font:%s; Glyph Anchors found: %s.' % (
            font.name, len(self.srcGlyphAnchors.keys()))

        with open(fname, 'w') as exportFile:
            json.dump(self.srcGlyphAnchors, exportFile)

        print 'SAVE:\t Font:%s; %s Glyph Anchors saved to %s.' % (
            font.name, len(self.srcGlyphAnchors.keys()), fname)
Beispiel #20
0
    def __init__(self):
        super(dlg_copyKerning, self).__init__()

        # - Init
        self.active_font = pFont()
        self.class_data = {}

        # - Widgets
        self.cmb_layer = QtGui.QComboBox()
        self.cmb_layer.addItems(self.active_font.masters() + ['All masters'])

        self.btn_loadFile = QtGui.QPushButton('From File')
        self.btn_loadFont = QtGui.QPushButton('From Font')
        self.btn_saveExpr = QtGui.QPushButton('Save')
        self.btn_loadExpr = QtGui.QPushButton('Load')
        self.btn_exec = QtGui.QPushButton('Execute')

        self.btn_loadFont.setEnabled(False)

        self.btn_loadFile.clicked.connect(self.classes_fromFile)
        self.btn_exec.clicked.connect(self.process)
        self.btn_saveExpr.clicked.connect(self.expr_toFile)
        self.btn_loadExpr.clicked.connect(self.expr_fromFile)

        self.txt_editor = QtGui.QPlainTextEdit()

        # - Build layouts
        layoutV = QtGui.QGridLayout()
        layoutV.addWidget(QtGui.QLabel('Load class kerning data:'), 0, 0, 1, 4)
        layoutV.addWidget(self.btn_loadFont, 1, 0, 1, 2)
        layoutV.addWidget(self.btn_loadFile, 1, 2, 1, 2)
        layoutV.addWidget(QtGui.QLabel('Process font master:'), 2, 0, 1, 2)
        layoutV.addWidget(self.cmb_layer, 2, 2, 1, 2)
        layoutV.addWidget(QtGui.QLabel(str_help), 3, 0, 1, 4)
        layoutV.addWidget(self.txt_editor, 4, 0, 20, 4)
        layoutV.addWidget(self.btn_saveExpr, 24, 0, 1, 2)
        layoutV.addWidget(self.btn_loadExpr, 24, 2, 1, 2)
        layoutV.addWidget(self.btn_exec, 25, 0, 1, 4)

        # - Set Widget
        self.setLayout(layoutV)
        self.setWindowTitle('%s %s' % (app_name, app_version))
        self.setGeometry(300, 300, 250, 500)
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)  # Always on top!!
        self.show()
Beispiel #21
0
    def pasteAnchor(self):
        font = pFont()
        dst_glyphs = {glyph.name: glyph for glyph in font.pGlyphs()}

        print 'WARN:\t Pasting Glyph Anchors to Font:%s;' % font.name
        for glyph_name, layer_anchors in self.srcGlyphAnchors.iteritems():
            if glyph_name in dst_glyphs:
                w_glyph = dst_glyphs[glyph_name]

                if self.cmb_mode.currentIndex == 1:
                    # - All master layers
                    for layer in w_glyph.masters():
                        if layer_anchors.has_key(layer.name):
                            w_glyph.clearAnchors(layer.name)

                            for anchor_name, anchor_pos in layer_anchors[
                                    layer.name]:
                                w_glyph.addAnchor(anchor_pos, anchor_name,
                                                  layer.name)

                            print 'PASTE MM:\t Glyph: /%s;\tLayer: %s.' % (
                                glyph_name, layer.name)
                        else:
                            print 'WARN:\t Glyph /%s - Layer %s not found!' % (
                                glyph_name, layer.name)
                else:
                    # - Active Layer only
                    w_glyph.clearAnchors()

                    for anchor_name, anchor_pos in layer_anchors:
                        w_glyph.addAnchor(anchor_pos, anchor_name)

                    print 'PASTE:\t Glyph: /%s;\tLayer: %s.' % (
                        glyph_name, w_glyph.layer().name)

                if self.cmb_flag.currentText != 'None':
                    w_glyph.setMark(
                        QtGui.QColor(self.cmb_flag.currentText).hue())

            else:
                print 'SKIP:\t Glyph /%s not found.' % glyph_name

        fl6.Update(CurrentFont())
Beispiel #22
0
    def __init__(self):
        super(dlg_selectGlyphsWithAnchor, self).__init__()
        self.f = pFont()
        self.edt_anchorName = AComboBox(findAllAnchors(self.f))
        self.chk_allMasters = QtGui.QCheckBox('Search in all masters')
        self.chk_allMasters.setChecked(True)
        self.btn_select = QtGui.QPushButton('&Select')
        self.btn_select.setStatusTip('Select glyphs that have the anchor')
        self.btn_select.clicked.connect(self.selectGlyphsWithAnchor)

        layoutV = QtGui.QVBoxLayout()
        layoutV.addWidget(self.edt_anchorName)
        layoutV.addWidget(self.chk_allMasters)
        layoutV.addWidget(self.btn_select)

        self.setLayout(layoutV)
        self.setWindowTitle('%s %s' % (app_name, app_version))
        self.setGeometry(300, 300, 300, 120)
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
        self.show()
Beispiel #23
0
    def __init__(self):
        super(dlg_GlyphCheckout, self).__init__()

        # - Init
        self.active_font = pFont()

        # - Basic Widgets
        self.wgt_calendar = QtGui.QCalendarWidget(self)
        self.wgt_calendar.setGridVisible(True)
        self.wgt_calendar.clicked.connect(self.showDate)
        date = self.wgt_calendar.selectedDate

        self.tab_glyphs = WTableView(table_dict)

        self.edt_checkStr = QtGui.QLineEdit()
        self.edt_checkStr.setPlaceholderText('Tag')
        self.btn_filter = QtGui.QPushButton('Filter')
        self.btn_refresh = QtGui.QPushButton('Refresh')
        self.btn_filter.clicked.connect(lambda: self.showDate(
            self.wgt_calendar.selectedDate, find=self.edt_checkStr.text))
        self.btn_refresh.clicked.connect(lambda: self.showDate())

        # - Build layouts
        layoutV = QtGui.QGridLayout()
        layoutV.addWidget(QtGui.QLabel('Select date:'), 0, 0, 1, 8)
        layoutV.addWidget(self.wgt_calendar, 1, 0, 5, 8)
        layoutV.addWidget(QtGui.QLabel('Glyphs modified on date:'), 6, 0, 1, 8)
        layoutV.addWidget(self.tab_glyphs, 7, 0, 15, 8)
        layoutV.addWidget(QtGui.QLabel('Filter by tag:'), 22, 0, 1, 1)
        layoutV.addWidget(self.edt_checkStr, 22, 1, 1, 3)
        layoutV.addWidget(self.btn_filter, 22, 4, 1, 2)
        layoutV.addWidget(self.btn_refresh, 22, 6, 1, 2)

        # - Set Widget
        self.setLayout(layoutV)
        self.setWindowTitle('%s %s' % (app_name, app_version))
        self.setGeometry(300, 300, 500, 800)
        #self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) # Always on top!!
        self.show()
Beispiel #24
0
    def copyAnchor(self):
        font = pFont()

        if self.cmb_mode.currentIndex == 1:
            self.srcGlyphAnchors = {}

            for glyph in font.pGlyphs():
                current_masters = glyph.masters()

                if len(current_masters):
                    layer_anchors = {}

                    for layer in current_masters:
                        current_anchors = layer.anchors

                        if len(current_anchors):
                            layer_anchors[layer.name] = [
                                (anchor.name, (int(anchor.point.x()),
                                               int(anchor.point.y())))
                                for anchor in current_anchors
                            ]

                    if len(layer_anchors.keys()):
                        self.srcGlyphAnchors[glyph.name] = layer_anchors

            print 'COPY MM:\t Font:%s; Glyph Anchors copied: %s.' % (
                font.name, len(self.srcGlyphAnchors.keys()))
        else:
            self.srcGlyphAnchors = {
                glyph.name:
                [(anchor.name, (int(anchor.point.x()), int(anchor.point.y())))
                 for anchor in glyph.anchors(fixedLayer)]
                for glyph in font.pGlyphs() if len(glyph.anchors(fixedLayer))
            }
            print 'COPY:\t Font:%s; Glyph Anchors copied: %s.' % (
                font.name, len(self.srcGlyphAnchors.keys()))

        self.btn_paste.setEnabled(True)
Beispiel #25
0
    def moveNodes(self, offset_x, offset_y, method):
        # - Init
        glyph = eGlyph()
        font = pFont()

        process_glyphs = getProcessGlyphs(pMode)

        for glyph in process_glyphs:
            wLayers = glyph._prepareLayers(pLayers)

            for layer in wLayers:
                selected_shapes = glyph.selectedAtShapes(index=False,
                                                         layer=layer,
                                                         deep=False)

                for shape, contour, node in selected_shapes:
                    wShape = pShape(shape)
                    if method == 'Shift':
                        wShape.shift(offset_x, offset_y)

                    elif method == 'Scale':
                        wShape.scale(1. + offset_x / 100.,
                                     1. + offset_y / 100.)

                    elif method == 'Shear':
                        wShape.shear(radians(offset_x), radians(offset_y))

            glyph.update()
            glyph.updateObject(
                glyph.fl, 'Element: %s @ %s.' % (method, '; '.join(wLayers)))

        # - Set Undo
        #glyph.updateObject(glyph.activeLayer(), '%s @ %s.' %(method, glyph.activeLayer().name), verbose=False)

        # - Finish it
        glyph.update()
Beispiel #26
0
    def refresh(self):
        # - Init
        layerBanList = ['#', 'img']
        self.glyph = eGlyph()
        self.head.edt_glyphName.setText(eGlyph().name)
        self.italic_angle = pFont().getItalicAngle()

        self.layers = sorted([
            layer.name for layer in self.glyph.layers()
            if all([item not in layer.name for item in layerBanList])
        ])

        self.head.cmb_0.clear()
        self.head.cmb_1.clear()
        self.head.cmb_0.addItems(self.layers)
        self.head.cmb_1.addItems(self.layers)
        self.head.cmb_0.setCurrentIndex(0)
        self.head.cmb_1.setCurrentIndex(0)
        self.axis = []

        self.head.edt_stemV0.setText('1')
        self.head.edt_stemV1.setText('2')
        self.head.edt_stemH0.setText('1')
        self.head.edt_stemH1.setText('2')

        self.tail.edt_width_0.clear()
        self.tail.edt_width_1.clear()
        self.tail.edt_width_t.clear()
        self.tail.edt_height_0.clear()
        self.tail.edt_height_1.clear()
        self.tail.edt_height_t.clear()

        self.mixer_dx.reset()
        self.mixer_dy.reset()
        self.scaler_dx.reset()
        self.scaler_dy.reset()
Beispiel #27
0
def buildGlyphAnchorData(fullGlyphset=False, cathegorize=False):
    # - Init
    font = pFont()
    data = defaultdict(lambda: defaultdict(dict))
    banList = ['.notdef', '.NOTDEF', 'CR', 'space', 'NULL']
    glyphList = font.pGlyphs() if fullGlyphset else font.selected_pGlyphs()

    for glyph in glyphList:
        for master in font.masters():
            if glyph.name not in banList:
                if cathegorize:
                    # - Set main type
                    glyphType = 'Unencoded'

                    if glyph.unicode is not None and glyph.unicode < 10000:
                        if unichr(glyph.unicode).isupper():
                            glyphType = 'Uppercase'
                        elif unichr(glyph.unicode).islower():
                            glyphType = 'Lowercase'
                        elif unichr(glyph.unicode).isdigit():
                            glyphType = 'Figures'
                        elif unichr(glyph.unicode).isdigit() and not unichr(
                                glyph.unicode).isalpha():
                            glyphType = 'Symbols'
                else:
                    glyphType = 'Selection'

                if glyph.hasLayer(master):
                    data[glyphType][glyph.name][master] = {
                        anchor.name: str(anchor.point)
                        for anchor in glyph.anchors(master)
                    }
                else:
                    data[glyphType][glyph.name][master] = {}

    return data
Beispiel #28
0
	def __init__(self, parentWidget):
		super(WFontMetrics, self).__init__()

		# - Init
		self.grid = QtGui.QGridLayout()
		self.upperWidget = parentWidget
		self.activeFont = pFont()
		self.metricData = {layer:self.activeFont.fontMetrics().asDict(layer) for layer in self.activeFont.masters()}

		# - Interface
		self.btn_apply = QtGui.QPushButton('Apply Changes')
		self.btn_reset = QtGui.QPushButton('Reset')
		self.btn_open = QtGui.QPushButton('Open')
		self.btn_save = QtGui.QPushButton('Save')

		self.btn_apply.clicked.connect(self.applyChanges)
		self.btn_reset.clicked.connect(self.resetChanges)
		self.btn_save.clicked.connect(self.exportMetrics)
		self.btn_open.clicked.connect(self.importMetrics)

		self.tab_fontMetrics = trTableView(self.metricData)

		# - Build
		lbl_name = QtGui.QLabel('Font Metrics (All Masters)')
		lbl_name.setMaximumHeight(20)
		self.grid.addWidget(lbl_name,		 		0, 0, 1, 24)
		self.grid.addWidget(self.tab_fontMetrics,	1, 0, 5, 21)
		self.grid.addWidget(self.btn_save,			1, 21, 1, 3)
		self.grid.addWidget(self.btn_open,			2, 21, 1, 3)
		self.grid.addWidget(self.btn_reset,			4, 21, 1, 3)
		self.grid.addWidget(self.btn_apply,			5, 21, 1, 3)

		for i in range(1,6):
			self.grid.setRowStretch(i,2)

		self.setLayout(self.grid)
Beispiel #29
0
	def __init__(self, parentWidget):
		super(QSmartCorner, self).__init__()
		self.upper_widget = parentWidget

		# -- Init
		self.active_font = pFont()
		self.builder = None
		self.font_masters = self.active_font.masters()
		self.empty_preset = lambda row: OrderedDict([(row, OrderedDict([('Preset', 'Preset %s' %row)] + [(master, '0') for master in self.font_masters]))])
		self.table_dict = self.empty_preset(0)
		self.last_preset = 0

		# -- Widgets
		self.lay_head = QtGui.QGridLayout()

		self.edt_glyphName = QtGui.QLineEdit()
		self.edt_glyphName.setPlaceholderText('Glyph name')

		# -- Buttons
		self.btn_getBuilder = QtGui.QPushButton('Set &Builder')
		self.btn_findBuilder = QtGui.QPushButton('&From Font')
		self.btn_addPreset = QtGui.QPushButton('Add')
		self.btn_delPreset = QtGui.QPushButton('Remove')
		self.btn_resetPreset = QtGui.QPushButton('Reset')
		self.btn_loadPreset = QtGui.QPushButton('&Load Presets')
		self.btn_savePreset = QtGui.QPushButton('&Save Presets')
		self.btn_apply_smartCorner = QtGui.QPushButton('&Apply Smart Corner')
		self.btn_remove_smartCorner = QtGui.QPushButton('R&emove Smart Corner')
		self.btn_remove_presetCorner = QtGui.QPushButton('&Find and Remove')

		self.btn_apply_smartCorner.setToolTip('Apply Smart Corner preset on SELECTED nodes.')
		self.btn_remove_smartCorner.setToolTip('Remove Smart Corner on SELECTED nodes.')
		self.btn_remove_presetCorner.setToolTip('Find and remove all Smart Corners that equal the currently selected preset.')


		self.btn_apply_round = QtGui.QPushButton('&Round')
		self.btn_apply_mitre = QtGui.QPushButton('&Mitre')
		self.btn_apply_overlap = QtGui.QPushButton('&Overlap')
		self.btn_apply_trap = QtGui.QPushButton('&Trap')
		self.btn_rebuild = QtGui.QPushButton('Rebuild corner')

		self.btn_getBuilder.setMinimumWidth(70)
		self.btn_findBuilder.setMinimumWidth(70)
		self.btn_apply_round.setMinimumWidth(70)
		self.btn_apply_mitre.setMinimumWidth(70)
		self.btn_apply_overlap.setMinimumWidth(70)
		self.btn_apply_trap.setMinimumWidth(70)
		self.btn_rebuild.setMinimumWidth(70)

		self.btn_addPreset.setMinimumWidth(70)
		self.btn_delPreset.setMinimumWidth(70)
		self.btn_loadPreset.setMinimumWidth(140)
		self.btn_savePreset.setMinimumWidth(140)
		self.btn_apply_smartCorner.setMinimumWidth(140)
		self.btn_remove_smartCorner.setMinimumWidth(140)
		self.btn_remove_presetCorner.setMinimumWidth(140)

		self.btn_getBuilder.setCheckable(True)
		self.btn_getBuilder.setChecked(False)
		self.btn_findBuilder.setEnabled(False)
		self.btn_apply_round.setEnabled(False)

		self.btn_getBuilder.clicked.connect(lambda: self.getBuilder())
		self.btn_addPreset.clicked.connect(lambda: self.preset_modify(False))
		self.btn_delPreset.clicked.connect(lambda: self.preset_modify(True))
		self.btn_resetPreset.clicked.connect(lambda: self.preset_reset())
		self.btn_loadPreset.clicked.connect(lambda: self.preset_load())
		self.btn_savePreset.clicked.connect(lambda: self.preset_save())

		self.btn_apply_smartCorner.clicked.connect(lambda: self.apply_SmartCorner(False))
		self.btn_remove_smartCorner.clicked.connect(lambda: self.apply_SmartCorner(True))
		self.btn_remove_presetCorner.clicked.connect(lambda: self.remove_SmartCorner())
		
		#self.btn_apply_round.clicked.connect(lambda: self.apply_round())
		self.btn_apply_mitre.clicked.connect(lambda: self.apply_mitre(False))
		self.btn_apply_overlap.clicked.connect(lambda: self.apply_mitre(True))
		self.btn_apply_trap.clicked.connect(lambda: self.apply_trap())
		self.btn_rebuild.clicked.connect(lambda: self.rebuild())

		# -- Preset Table
		self.tab_presets = trTableView(None)
		self.preset_reset()			

		# -- Build Layout
		self.lay_head.addWidget(QtGui.QLabel('Value Presets:'), 0,0,1,8)
		self.lay_head.addWidget(self.btn_loadPreset,			1,0,1,4)
		self.lay_head.addWidget(self.btn_savePreset,			1,4,1,4)
		self.lay_head.addWidget(self.btn_addPreset,				2,0,1,2)
		self.lay_head.addWidget(self.btn_delPreset,				2,2,1,2)
		self.lay_head.addWidget(self.btn_resetPreset,			2,4,1,4)
		self.lay_head.addWidget(self.tab_presets,				3,0,5,8)

		self.lay_head.addWidget(QtGui.QLabel('Corner Actions:'),10, 0, 1, 8)
		self.lay_head.addWidget(self.btn_apply_round,			11, 0, 1, 2)
		self.lay_head.addWidget(self.btn_apply_mitre,			11, 2, 1, 2)
		self.lay_head.addWidget(self.btn_apply_overlap,			11, 4, 1, 2)
		self.lay_head.addWidget(self.btn_apply_trap,			11, 6, 1, 2)
		self.lay_head.addWidget(self.btn_rebuild,				12, 0, 1, 8)

		self.lay_head.addWidget(QtGui.QLabel('Smart Corner:'),	13,0,1,8)
		self.lay_head.addWidget(QtGui.QLabel('Builder: '),		14,0,1,1)
		self.lay_head.addWidget(self.edt_glyphName,				14,1,1,3)
		self.lay_head.addWidget(self.btn_getBuilder,			14,4,1,2)
		self.lay_head.addWidget(self.btn_findBuilder,			14,6,1,2)
		self.lay_head.addWidget(self.btn_remove_smartCorner,	15,0,1,4)
		self.lay_head.addWidget(self.btn_remove_presetCorner,	15,4,1,4)
		self.lay_head.addWidget(self.btn_apply_smartCorner,		16,0,1,8)

		self.addLayout(self.lay_head)
Beispiel #30
0
#FLM: Glyph: Name Shapes
# VER: 1.0
#----------------------------------
# Foundry:  The FontMaker
# Typeface: Bolyar Sans
# Date:     11.12.2018
#----------------------------------

# - Dependancies
import fontlab as fl6

from typerig.proxy import pFont, pGlyph

# - Init ------------------------------------------------
font = pFont()
glyph = pGlyph()
layers = ['100', '900']
exclude_shape = '_'

# - Process --------------------------------------------
for layer in layers:
    for shape in glyph.shapes(layer):
        if exclude_shape not in shape.shapeData.name:
            shape.shapeData.name = glyph.name

# - Finish --------------------------------------------
glyph.update()
glyph.updateObject(glyph.fl)
print 'DONE.'