def tag_nodes(self, mode): # - Init new_name = self.edt_tagStringNode.text.strip() # - Helper def tag(glyph, newName): wLayers = glyph._prepareLayers(pLayers) for layer in wLayers: for node in glyph.selectedNodes(layer): node.name = newName glyph.updateObject( glyph.fl, 'Glyph: %s; Nodes named: %s ' % (glyph.name, new_name)) glyph.update() # - Process if mode == 'G': glyph = eGlyph() tag(glyph, new_name) elif mode == 'W': process_glyphs = [] process_glyphs = [ eGlyph(glyph) for glyph in pWorkspace().getTextBlockGlyphs() ] for glyph in process_glyphs: tag(glyph, new_name)
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 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 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 refresh(self): # - Init self.active_workspace = pWorkspace() self.active_canvas = self.active_workspace.getCanvas() self.active_textBlockList = self.active_workspace.getTextBlockList() # - Build List and style it self.lst_textBlocks.clear() self.lst_textBlocks.addItems([ 'T: %s...\tG: %s\tS: %s pt\t F: %s'.expandtabs(12) % (item.symbolList().string(True)[:10], item.glyphsCount(), item.fontSize, item.frameRect) for item in self.active_textBlockList ])
def capture(self): # - Init process_angles = {} active_workspace = pWorkspace() # - Rebuild self.__clear() self.__build() # - Collect process glyphs if pMode == 0: self.process_glyphs.append(eGlyph()) # Current Active Glyph if pMode == 1: self.process_glyphs = [eGlyph(glyph) for glyph in active_workspace.getTextBlockGlyphs()] # All glyphs in current window if pMode == 2: self.process_glyphs = self.active_font.selectedGlyphs(extend=eGlyph) # Selected glyphs in font window if pMode > 2: return # - Get nodes grouped by smart angle value if len(self.process_glyphs): for glyph in self.process_glyphs: #wLayers = glyph._prepareLayers(pLayers) layer = None pNodes = glyph.nodes(layer=layer, extend=pNode) for node in pNodes: smart_angle = node.getSmartAngle() if smart_angle[0]: process_angles.setdefault(smart_angle[1], []).append(node) # - Build sliders for angle_value, angle_nodes in process_angles.iteritems(): new_slider = trSliderCtrl('0', '100', angle_value, 5) new_slider.sld_axis.valueChanged.connect(self.__processNodes) self.addLayout(new_slider) self.sliders.append([new_slider, angle_value, angle_nodes]) # - Set undo snapshot self.update_glyphs(self.process_glyphs, True)
fontPath = os.path.split(font.fg.path)[0] fname = QtGui.QFileDialog.getOpenFileName(self, 'Load kerning classes from file', fontPath, ';;'.join(fileFormats)) if fname != None: with open(fname, 'r') as importFile: source_data = json.load(importFile) if source_data.has_key('masters'): # A Fontlab JSON Class kerning file source_data = json_class_dumb_decoder(source_data) return source_data # - Init ----------------------------- font = proxy.pFont() g = proxy.pGlyph() ws = proxy.pWorkspace() transform = (getLowercaseCodepoint, getUppercaseCodepoint) load_dlg = load_classes(font) font_kerning = {layer:proxy.pKerning(font.kerning(layer), load_dlg.classes[layer]) for layer in font.masters()} # - This will effectively copy all of the UC:UC kerning pairs to LC:LC, UC:LC, LC:UC # - For Bolyar Sans project for layer, kerning in font_kerning.iteritems(): kerning_LC2LC = kerning.getKerningForLeaders(transform[0], transform[0]) kerning_UC2LC = kerning.getKerningForLeaders(None, transform[0]) kerning_LC2UC = kerning.getKerningForLeaders(transform[0], None) pri kerning_UC2LC kerning.fg.setPlainPairs(kerning_LC2LC + kerning_UC2LC + kerning_LC2UC)