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)
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()
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())
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)
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()
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)
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()
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.'
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()))
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)
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
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)
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)
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)
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()
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())
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()
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()
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)
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()
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()
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
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)
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)
#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.'