Skip to content

Instantly share code, notes, and snippets.

import AppKit
import CoreText
x, y, w, h = 100, 100, 300, 500
f = FormattedString()
f.fontSize(12)
f += "hello"
f.fill(1, 0, 0)
@typemytype
typemytype / drawBotFormattedMarkdown.py
Created April 6, 2020 08:20
support for markdown in a FormattedString
import AppKit
def appendHTML(self, html):
htmlString = AppKit.NSString.stringWithString_(html)
txt, _, _ = AppKit.NSAttributedString.alloc().initWithData_options_documentAttributes_error_(
htmlString.dataUsingEncoding_(AppKit.NSUTF8StringEncoding),
{AppKit.NSDocumentTypeDocumentAttribute: AppKit.NSHTMLTextDocumentType, AppKit.NSCharacterEncodingDocumentAttribute: AppKit.NSUTF8StringEncoding},
None, None)
self._attributedString.appendAttributedString_(txt)
# runs in drawbot
# shows all names of
import AppKit
names = [n for n in dir(AppKit) if n.startswith("NSImageName")]
for name in names:
im = AppKit.NSImage.imageNamed_(getattr(AppKit, name))
if im is None:
print(name)
from mojo.events import addObserver
class SuperZoom(object):
def __init__(self):
addObserver(self, "keyDown", "keyDown")
def keyDown(self, notification):
view = notification["view"]
from fontMath.mathGlyph import MathGlyph, _expandImage
def translate(self, pt):
x, y = pt
copiedGlyph = self.copyWithoutMathSubObjects()
# width
copiedGlyph.width = self.width + x
# height
copiedGlyph.height = self.height + y
# contours
import AppKit
import CoreText
def fontWithFeatures(fontName, fontSize=10, features=None):
font = AppKit.NSFont.fontWithName_size_(fontName, fontSize)
if not features:
return font
descriptor = CoreText.CTFontDescriptorCreateCopyWithAttributes(font.fontDescriptor(), {CoreText.kCTFontFeatureSettingsAttribute: features})
return AppKit.NSFont.fontWithDescriptor_size_(descriptor, fontSize)
import AppKit
layoutAttribute = {
"left": AppKit.NSLayoutAttributeLeft,
"right": AppKit.NSLayoutAttributeRight,
"top": AppKit.NSLayoutAttributeTop,
"bottom": AppKit.NSLayoutAttributeBottom,
"leading": AppKit.NSLayoutAttributeLeading,
"trailing": AppKit.NSLayoutAttributeTrailing,
"width": AppKit.NSLayoutAttributeWidth,
import defcon
glyph = defcon.Glyph()
pen = glyph.getPen()
pen.moveTo((76, 102))
pen.qCurveTo(
(168, 94),
from vanilla import *
class TestConstraints:
def __init__(self):
self.w = Window((400, 400), "AutoLayout", minSize=(200, 200))
self.w.info = TextBox("auto", "auto layout:", alignment="right")
self.w.input = EditText("auto")
import pyclipper
from booleanOperations.booleanOperationManager import _addContour, _operationMap, _fillTypeMap
def clipExecute(subjectContours, clipContours, operation, subjectFillType="nonZero",
clipFillType="nonZero", addBoundsTest=True):
pc = pyclipper.Pyclipper()
for i, subjectContour in enumerate(subjectContours):
_addContour(clipperPath=pc, contour=subjectContour, fillType=pyclipper.PT_SUBJECT, contourCount=i)