A useful trick for reporter implementors

If you are writing a reporter plugin which does a lot of work, you may want to restrict the operation of the reporter to just the visible part of the glyph on the screen. If the user has zoomed in to just a portion of the glyph, you can ignore the parts of the glyph which are not being displayed.

The following routine will give you an NSRect which expresses the visible bounds of the glyph:

from Quartz.CoreGraphics import CGRectIntersection

def visibleRectangle():
	thisEdit = Glyphs.font.currentTab
	origin = thisEdit.selectedLayerOrigin
	scale = thisEdit.graphicView().scale()
	bounds = thisEdit.graphicView().visibleRect()
	bounds.origin.x -= origin.x
	bounds.origin.y -= origin.y
	bounds.origin.x /= scale
	bounds.origin.y /= scale
	bounds.size.width /= scale
	bounds.size.height /= scale
	return CGRectIntersection(bounds, Glyphs.font.selectedLayers[0].bounds)
4 Likes

I would use the Foundation function NSIntersectsRect instead of the one form CoreGraphics.

Nice! Thanks to both of you. Sounds useful.