def drawRect_(self, rect): rect = self.bounds() rect = NSInsetRect(rect, .5, .5) path = roundedRectBezierPath(rect, 7) HUDWindowColor.set() path.fill() HUDWindowLineColor.set() path.stroke()
def GlyphCellDetailFactory(glyph): font = glyph.font imageWidth = 200 imageHeight = 280 scale = 120 / font.info.unitsPerEm glyphLeftOffset = (imageWidth - (glyph.width * scale)) / 2 basePath = roundedRectBezierPath(((.5, .5), (imageWidth - 1, imageHeight - 1)), 7) basePath.setLineWidth_(1.0) glyphPath = glyph.getRepresentation("defconAppKit.NSBezierPath") line1Path = NSBezierPath.bezierPath() line1Path.moveToPoint_((1, 120.5)) line1Path.lineToPoint_((imageWidth-1, 120.5)) line1Path.setLineWidth_(1.0) line2Path = NSBezierPath.bezierPath() line2Path.moveToPoint_((1, 121.5)) line2Path.lineToPoint_((imageWidth-1, 121.5)) line2Path.setLineWidth_(1.0) lineColor = NSColor.colorWithCalibratedWhite_alpha_(.5, 1.0) paragraph = NSMutableParagraphStyle.alloc().init() paragraph.setAlignment_(NSRightTextAlignment) paragraph.setLineBreakMode_(NSLineBreakByCharWrapping) leftAttributes = { NSFontAttributeName : NSFont.systemFontOfSize_(12.0), NSForegroundColorAttributeName : NSColor.whiteColor(), NSParagraphStyleAttributeName : paragraph } paragraph = NSMutableParagraphStyle.alloc().init() paragraph.setAlignment_(NSLeftTextAlignment) paragraph.setLineBreakMode_(NSLineBreakByTruncatingMiddle) rightAttributes = { NSFontAttributeName : NSFont.systemFontOfSize_(12.0), NSForegroundColorAttributeName : NSColor.whiteColor(), NSParagraphStyleAttributeName : paragraph } nameTitle = NSAttributedString.alloc().initWithString_attributes_("Name", leftAttributes) nameText = NSAttributedString.alloc().initWithString_attributes_(glyph.name, rightAttributes) uniTitle = NSAttributedString.alloc().initWithString_attributes_("Unicode", leftAttributes) uni = glyph.unicode if uni is None: uni = "" else: uni = hex(uni)[2:].upper() if len(uni) < 4: uni = uni.zfill(4) uniText = NSAttributedString.alloc().initWithString_attributes_(str(uni), rightAttributes) widthTitle = NSAttributedString.alloc().initWithString_attributes_("Width", leftAttributes) width = glyph.width if width is None: width = 0 width = round(width, 3) if width == int(width): width = int(width) widthText = NSAttributedString.alloc().initWithString_attributes_(str(width), rightAttributes) leftTitle = NSAttributedString.alloc().initWithString_attributes_("Left Margin", leftAttributes) leftMargin = glyph.leftMargin if leftMargin is None: leftMargin = 0 leftMargin = round(leftMargin, 3) if leftMargin == int(leftMargin): leftMargin = int(leftMargin) leftText = NSAttributedString.alloc().initWithString_attributes_(str(leftMargin), rightAttributes) rightTitle = NSAttributedString.alloc().initWithString_attributes_("Right Margin", leftAttributes) rightMargin = glyph.rightMargin if rightMargin is None: rightMargin = 0 rightMargin = round(rightMargin, 3) if rightMargin == int(rightMargin): rightMargin = int(rightMargin) rightText = NSAttributedString.alloc().initWithString_attributes_(str(rightMargin), rightAttributes) image = NSImage.alloc().initWithSize_((imageWidth, imageHeight)) image.setFlipped_(True) image.lockFocus() NSColor.colorWithCalibratedWhite_alpha_(0, .65).set() basePath.fill() lineColor.set() basePath.stroke() context = NSGraphicsContext.currentContext() context.saveGraphicsState() transform = NSAffineTransform.transform() transform.translateXBy_yBy_(glyphLeftOffset, 145) transform.scaleBy_(scale) transform.translateXBy_yBy_(0, -font.info.descender) transform.concat() NSColor.whiteColor().set() glyphPath.fill() context.restoreGraphicsState() lineColor.set() line1Path.stroke() NSColor.colorWithCalibratedWhite_alpha_(0, .5).set() line2Path.stroke() transform = NSAffineTransform.transform() transform.translateXBy_yBy_(0, 110) transform.scaleXBy_yBy_(1.0, -1.0) transform.concat() nameTitle.drawInRect_(((0, 0), (90, 17))) nameText.drawInRect_(((95, 0), (85, 17))) uniTitle.drawInRect_(((0, 20), (90, 17))) uniText.drawInRect_(((95, 20), (85, 17))) widthTitle.drawInRect_(((0, 40), (90, 17))) widthText.drawInRect_(((95, 40), (85, 17))) leftTitle.drawInRect_(((0, 60), (90, 17))) leftText.drawInRect_(((95, 60), (85, 17))) rightTitle.drawInRect_(((0, 80), (90, 17))) rightText.drawInRect_(((95, 80), (85, 17))) image.unlockFocus() return image
def drawRect_(self, rect): rect = self.bounds() path = roundedRectBezierPath(rect, 5) interactiveWindowColor.set() path.fill()
def addCountBadgeToIcon(count, iconImage=None): if iconImage is None: iconImage = NSImage.alloc().initWithSize_((40, 40)) iconImage.lockFocus() NSColor.colorWithCalibratedRed_green_blue_alpha_(0, 0, 1, .5).set() path = NSBezierPath.bezierPath() path.appendBezierPathWithOvalInRect_(((0, 0), iconImage.size())) path.fill() iconImage.unlockFocus() # badge text textShadow = NSShadow.alloc().init() textShadow.setShadowOffset_((2, -2)) textShadow.setShadowColor_( NSColor.colorWithCalibratedRed_green_blue_alpha_(0, 0, 0, 1.0)) textShadow.setShadowBlurRadius_(2.0) paragraph = NSMutableParagraphStyle.alloc().init() paragraph.setAlignment_(NSCenterTextAlignment) paragraph.setLineBreakMode_(NSLineBreakByCharWrapping) attributes = { NSFontAttributeName: NSFont.boldSystemFontOfSize_(12.0), NSForegroundColorAttributeName: NSColor.whiteColor(), NSParagraphStyleAttributeName: paragraph, NSShadowAttributeName: textShadow } text = NSAttributedString.alloc().initWithString_attributes_( str(count), attributes) rectWidth, rectHeight = NSString.stringWithString_( str(count)).sizeWithAttributes_(attributes) rectWidth = int(round(rectWidth + 8)) rectHeight = int(round(rectHeight + 4)) rectLeft = 0 rectBottom = 0 # badge shadow badgeShadow = NSShadow.alloc().init() badgeShadow.setShadowOffset_((0, -2)) badgeShadow.setShadowColor_(NSColor.blackColor()) badgeShadow.setShadowBlurRadius_(4.0) # badge path badgePath = roundedRectBezierPath( ((rectLeft, rectBottom), (rectWidth, rectHeight)), 3) # badge image badgeWidth = rectWidth + 3 badgeHeight = rectHeight + 3 badgeImage = NSImage.alloc().initWithSize_((badgeWidth, badgeHeight)) badgeImage.lockFocus() transform = NSAffineTransform.transform() transform.translateXBy_yBy_(1.5, 1.5) transform.concat() NSColor.colorWithCalibratedRed_green_blue_alpha_(.2, .2, .25, 1.0).set() badgePath.fill() NSColor.colorWithCalibratedRed_green_blue_alpha_(.8, .8, .9, 1.0).set() badgePath.setLineWidth_(1.0) badgePath.stroke() text.drawInRect_(((0, -1), (rectWidth, rectHeight))) badgeImage.unlockFocus() # make the composite image imageWidth, imageHeight = iconImage.size() imageWidth += (badgeWidth - 15) imageHeight += 10 badgeLeft = imageWidth - badgeWidth - 3 badgeBottom = 3 image = NSImage.alloc().initWithSize_((imageWidth, imageHeight)) image.lockFocus() context = NSGraphicsContext.currentContext() # icon iconImage.drawAtPoint_fromRect_operation_fraction_( (0, 10), ((0, 0), iconImage.size()), NSCompositeSourceOver, 1.0) # badge context.saveGraphicsState() badgeShadow.set() badgeImage.drawAtPoint_fromRect_operation_fraction_( (badgeLeft, badgeBottom), ((0, 0), badgeImage.size()), NSCompositeSourceOver, 1.0) context.restoreGraphicsState() # done image.unlockFocus() return image
def GlyphCellDetailFactory(glyph, font): imageWidth = 200 imageHeight = 280 scale = 120 / font.info.unitsPerEm glyphLeftOffset = (imageWidth - (glyph.width * scale)) / 2 basePath = roundedRectBezierPath( ((.5, .5), (imageWidth - 1, imageHeight - 1)), 7) basePath.setLineWidth_(1.0) glyphPath = glyph.getRepresentation("defconAppKit.NSBezierPath") line1Path = NSBezierPath.bezierPath() line1Path.moveToPoint_((1, 120.5)) line1Path.lineToPoint_((imageWidth - 1, 120.5)) line1Path.setLineWidth_(1.0) line2Path = NSBezierPath.bezierPath() line2Path.moveToPoint_((1, 121.5)) line2Path.lineToPoint_((imageWidth - 1, 121.5)) line2Path.setLineWidth_(1.0) lineColor = NSColor.colorWithCalibratedWhite_alpha_(.5, 1.0) paragraph = NSMutableParagraphStyle.alloc().init() paragraph.setAlignment_(NSRightTextAlignment) paragraph.setLineBreakMode_(NSLineBreakByCharWrapping) leftAttributes = { NSFontAttributeName: NSFont.systemFontOfSize_(12.0), NSForegroundColorAttributeName: NSColor.whiteColor(), NSParagraphStyleAttributeName: paragraph } paragraph = NSMutableParagraphStyle.alloc().init() paragraph.setAlignment_(NSLeftTextAlignment) paragraph.setLineBreakMode_(NSLineBreakByTruncatingMiddle) rightAttributes = { NSFontAttributeName: NSFont.systemFontOfSize_(12.0), NSForegroundColorAttributeName: NSColor.whiteColor(), NSParagraphStyleAttributeName: paragraph } nameTitle = NSAttributedString.alloc().initWithString_attributes_( "Name", leftAttributes) nameText = NSAttributedString.alloc().initWithString_attributes_( glyph.name, rightAttributes) uniTitle = NSAttributedString.alloc().initWithString_attributes_( "Unicode", leftAttributes) uni = glyph.unicode if uni is None: uni = "" else: uni = hex(uni)[2:].upper() if len(uni) < 4: uni = uni.zfill(4) uniText = NSAttributedString.alloc().initWithString_attributes_( str(uni), rightAttributes) widthTitle = NSAttributedString.alloc().initWithString_attributes_( "Width", leftAttributes) width = glyph.width if width is None: width = 0 width = round(width, 3) if width == int(width): width = int(width) widthText = NSAttributedString.alloc().initWithString_attributes_( str(width), rightAttributes) leftTitle = NSAttributedString.alloc().initWithString_attributes_( "Left Margin", leftAttributes) leftMargin = glyph.leftMargin if leftMargin is None: leftMargin = 0 leftMargin = round(leftMargin, 3) if leftMargin == int(leftMargin): leftMargin = int(leftMargin) leftText = NSAttributedString.alloc().initWithString_attributes_( str(leftMargin), rightAttributes) rightTitle = NSAttributedString.alloc().initWithString_attributes_( "Right Margin", leftAttributes) rightMargin = glyph.rightMargin if rightMargin is None: rightMargin = 0 rightMargin = round(rightMargin, 3) if rightMargin == int(rightMargin): rightMargin = int(rightMargin) rightText = NSAttributedString.alloc().initWithString_attributes_( str(rightMargin), rightAttributes) image = NSImage.alloc().initWithSize_((imageWidth, imageHeight)) image.setFlipped_(True) image.lockFocus() NSColor.colorWithCalibratedWhite_alpha_(0, .65).set() basePath.fill() lineColor.set() basePath.stroke() context = NSGraphicsContext.currentContext() context.saveGraphicsState() transform = NSAffineTransform.transform() transform.translateXBy_yBy_(glyphLeftOffset, 145) transform.scaleBy_(scale) transform.translateXBy_yBy_(0, -font.info.descender) transform.concat() NSColor.whiteColor().set() glyphPath.fill() context.restoreGraphicsState() lineColor.set() line1Path.stroke() NSColor.colorWithCalibratedWhite_alpha_(0, .5).set() line2Path.stroke() transform = NSAffineTransform.transform() transform.translateXBy_yBy_(0, 110) transform.scaleXBy_yBy_(1.0, -1.0) transform.concat() nameTitle.drawInRect_(((0, 0), (90, 17))) nameText.drawInRect_(((95, 0), (85, 17))) uniTitle.drawInRect_(((0, 20), (90, 17))) uniText.drawInRect_(((95, 20), (85, 17))) widthTitle.drawInRect_(((0, 40), (90, 17))) widthText.drawInRect_(((95, 40), (85, 17))) leftTitle.drawInRect_(((0, 60), (90, 17))) leftText.drawInRect_(((95, 60), (85, 17))) rightTitle.drawInRect_(((0, 80), (90, 17))) rightText.drawInRect_(((95, 80), (85, 17))) image.unlockFocus() return image
def addCountBadgeToIcon(count, iconImage=None): if iconImage is None: iconImage = NSImage.alloc().initWithSize_((40, 40)) iconImage.lockFocus() NSColor.colorWithCalibratedRed_green_blue_alpha_(0, 0, 1, .5).set() path = NSBezierPath.bezierPath() path.appendBezierPathWithOvalInRect_(((0, 0), iconImage.size())) path.fill() iconImage.unlockFocus() # badge text textShadow = NSShadow.alloc().init() textShadow.setShadowOffset_((2, -2)) textShadow.setShadowColor_(NSColor.colorWithCalibratedRed_green_blue_alpha_(0, 0, 0, 1.0)) textShadow.setShadowBlurRadius_(2.0) paragraph = NSMutableParagraphStyle.alloc().init() paragraph.setAlignment_(NSCenterTextAlignment) paragraph.setLineBreakMode_(NSLineBreakByCharWrapping) attributes = { NSFontAttributeName : NSFont.boldSystemFontOfSize_(12.0), NSForegroundColorAttributeName : NSColor.whiteColor(), NSParagraphStyleAttributeName : paragraph, NSShadowAttributeName : textShadow } text = NSAttributedString.alloc().initWithString_attributes_(str(count), attributes) rectWidth, rectHeight = NSString.stringWithString_(str(count)).sizeWithAttributes_(attributes) rectWidth = int(round(rectWidth + 8)) rectHeight = int(round(rectHeight + 4)) rectLeft = 0 rectRight = rectWidth rectBottom = 0 rectTop = int(rectBottom + rectHeight) # badge shadow badgeShadow = NSShadow.alloc().init() badgeShadow.setShadowOffset_((0, -2)) badgeShadow.setShadowColor_(NSColor.blackColor()) badgeShadow.setShadowBlurRadius_(4.0) # badge path badgePath = roundedRectBezierPath(((rectLeft, rectBottom), (rectWidth, rectHeight)), 3) # badge image badgeWidth = rectWidth + 3 badgeHeight = rectHeight + 3 badgeImage = NSImage.alloc().initWithSize_((badgeWidth, badgeHeight)) badgeImage.lockFocus() transform = NSAffineTransform.transform() transform.translateXBy_yBy_(1.5, 1.5) transform.concat() NSColor.colorWithCalibratedRed_green_blue_alpha_(.2, .2, .25, 1.0).set() badgePath.fill() NSColor.colorWithCalibratedRed_green_blue_alpha_(.8, .8, .9, 1.0).set() badgePath.setLineWidth_(1.0) badgePath.stroke() text.drawInRect_(((0, -1), (rectWidth, rectHeight))) badgeImage.unlockFocus() # make the composite image imageWidth, imageHeight = iconImage.size() imageWidth += (badgeWidth - 15) imageHeight += 10 badgeLeft = imageWidth - badgeWidth - 3 badgeBottom = 3 image = NSImage.alloc().initWithSize_((imageWidth, imageHeight)) image.lockFocus() context = NSGraphicsContext.currentContext() # icon iconImage.drawAtPoint_fromRect_operation_fraction_( (0, 10), ((0, 0), iconImage.size()), NSCompositeSourceOver, 1.0) # badge context.saveGraphicsState() badgeShadow.set() badgeImage.drawAtPoint_fromRect_operation_fraction_( (badgeLeft, badgeBottom), ((0, 0), badgeImage.size()), NSCompositeSourceOver, 1.0) context.restoreGraphicsState() # done image.unlockFocus() return image