def drawTextAtPoint(self, text, textPosition, fontSize=10.0, fontColor=NSColor.blackColor(), align='bottomleft'): """ Use self.drawTextAtPoint("blabla", myNSPoint) to display left-aligned text at myNSPoint. """ try: alignment = { 'topleft': 6, 'topcenter': 7, 'topright': 8, 'left': 3, 'center': 4, 'right': 5, 'bottomleft': 0, 'bottomcenter': 1, 'bottomright': 2 } currentZoom = self.getScale() fontAttributes = { NSFontAttributeName: NSFont.labelFontOfSize_(fontSize / currentZoom), NSForegroundColorAttributeName: fontColor} displayText = NSAttributedString.alloc().initWithString_attributes_(unicode(text), fontAttributes) textAlignment = alignment[align] # top left: 6, top center: 7, top right: 8, center left: 3, center center: 4, center right: 5, bottom left: 0, bottom center: 1, bottom right: 2 displayText.drawAtPoint_alignment_(textPosition, textAlignment) except: self.logError(traceback.format_exc())
def initWithFrame_view_size_name_captionText_(self, frame, view, size, name, caption_text): self = super(PictureView, self).initWithFrame_(frame) if not self: return _size = iW, iH = size xOffset = (frame.size[0] - iW) / 2.0 yOffset = frame.size[1] - xOffset - iH self.dropboxViewFinalPosition = NSRect((xOffset, yOffset), _size) self.dropboxView = view self.dropboxView.setFrame_(self.dropboxViewFinalPosition) self.addSubview_(self.dropboxView) self.versionView = NSTextView.alloc().initWithFrame_(NSRect((0, 0), frame.size)) self.versionView.setDrawsBackground_(NO) self.versionView.setEditable_(NO) self.versionView.setSelectable_(NO) self.versionView.textStorage().beginEditing() self.versionView.textStorage().mutableString().setString_(name) self.versionView.textStorage().setForegroundColor_(NSColor.whiteColor()) self.versionView.textStorage().setFont_(NSFont.labelFontOfSize_(18)) self.versionView.textStorage().endEditing() self.versionView.setAlignment_range_(NSCenterTextAlignment, NSMakeRange(0, self.versionView.string().length())) self.versionView.layoutManager().glyphRangeForTextContainer_(self.versionView.textContainer()) textSize1 = self.versionView.layoutManager().usedRectForTextContainer_(self.versionView.textContainer()).size textAnchor1 = 0 self.versionView2 = NSTextView.alloc().initWithFrame_(NSRect((0, 0), frame.size)) self.versionView2.setDrawsBackground_(NO) self.versionView2.setEditable_(NO) self.versionView2.setSelectable_(NO) self.versionView2.textStorage().beginEditing() self.versionView2.textStorage().mutableString().setString_(u'"%s"' % (caption_text,)) self.versionView2.textStorage().setForegroundColor_(NSColor.whiteColor()) self.versionView2.textStorage().setFont_(NSFont.labelFontOfSize_(13)) self.versionView2.textStorage().endEditing() self.versionView2.setAlignment_range_(NSCenterTextAlignment, NSMakeRange(0, self.versionView2.string().length())) self.versionView2.layoutManager().glyphRangeForTextContainer_(self.versionView2.textContainer()) textSize2 = self.versionView2.layoutManager().usedRectForTextContainer_(self.versionView2.textContainer()).size textAnchor2 = 0 bottomToLogoViewBaseline = yOffset textSeparation = (yOffset - textSize1[1] - textSize2[1]) * 0.2 combinedHeight = textSize1[1] + textSize2[1] + textSeparation self.versionView2FinalPosition = NSRect(((frame.size[0] - textSize2[0]) / 2.0, (bottomToLogoViewBaseline - combinedHeight) / 2.0), (textSize2[0], textSize2[1] + textAnchor2)) self.versionView2.setFrame_(self.versionView2FinalPosition) self.versionViewFinalPosition = NSRect(((frame.size[0] - textSize1[0]) / 2.0, self.versionView2.frame().origin[1] + textSeparation + self.versionView2.frame().size[1]), (textSize1[0], textSize1[1] + textAnchor1)) self.versionView.setFrame_(self.versionViewFinalPosition) self.addSubview_(self.versionView) self.addSubview_(self.versionView2) return self
def init(self): self = super(LineNumberNSRulerView, self).init() self._font = NSFont.labelFontOfSize_(NSFont.systemFontSizeForControlSize_(NSMiniControlSize)) self._textColor = NSColor.colorWithCalibratedWhite_alpha_(.42, 1) self._rulerBackgroundColor = None self._lineIndices = None return self
def init(self): self = super(LineNumberNSRulerView, self).init() self._font = NSFont.labelFontOfSize_( NSFont.systemFontSizeForControlSize_(NSMiniControlSize)) self._textColor = NSColor.colorWithCalibratedWhite_alpha_(.42, 1) self._rulerBackgroundColor = None self._lineIndices = None return self
def initWithFrame_imageDir_(self, frame, imageDir): self = super(IntroView, self).initWithFrame_(frame) if not self: return None dropboxImage = NSImage.alloc().initWithContentsOfFile_(os.path.join(imageDir, u'box_stroked_150.png')) iW, iH = dropboxImage.size() newHeight = iH * 300.0 / iW self.dropboxViewFinalPosition = NSRect((25, frame.size[1] - 43 - newHeight), (300, newHeight)) self.dropboxView = ShadowedImage.alloc().initWithFrame_(self.dropboxViewFinalPosition) self.dropboxView.setImageScaling_(NSScaleToFit) self.dropboxView.setImage_(dropboxImage) self.dropboxView.setShadowColor_(NSColor.colorWithCalibratedRed_green_blue_alpha_(0, 0, 0, 0.5)) self.dropboxView.setShadowOffset_((0.0, -2.0)) self.dropboxView.setShadowBlurRadius_(5.0) logoImage = NSImage.alloc().initWithContentsOfFile_(os.path.join(imageDir, u'dropboxlogo.png')) iW, iH = logoImage.size() newHeight = iH * 300.0 / iW self.logoViewFinalPosition = NSRect((25, frame.size[1] - 334 - newHeight), (300, newHeight)) self.logoView = NSImageView.alloc().initWithFrame_(self.logoViewFinalPosition) self.logoView.setImage_(logoImage) self.versionView = NSTextView.alloc().initWithFrame_(NSRect((0, 0), frame.size)) self.versionView.setDrawsBackground_(NO) self.versionView.setEditable_(NO) self.versionView.setSelectable_(NO) self.versionView.textStorage().mutableString().setString_(u'Version %s' % build_number.VERSION) self.versionView.textStorage().setFont_(NSFont.labelFontOfSize_(14)) self.versionView.layoutManager().glyphRangeForTextContainer_(self.versionView.textContainer()) textSize1 = self.versionView.layoutManager().usedRectForTextContainer_(self.versionView.textContainer()).size textAnchor1 = 5 self.versionView2 = NSTextView.alloc().initWithFrame_(NSRect((0, 0), frame.size)) self.versionView2.setDrawsBackground_(NO) self.versionView2.setEditable_(NO) self.versionView2.setSelectable_(NO) self.versionView2.textStorage().mutableString().setString_(u'Copyright \xa9 2007-2010 Dropbox Inc.') self.versionView2.setFont_(NSFont.systemFontOfSize_(NSFont.systemFontSizeForControlSize_(NSSmallControlSize))) self.versionView2.layoutManager().glyphRangeForTextContainer_(self.versionView2.textContainer()) textSize2 = self.versionView2.layoutManager().usedRectForTextContainer_(self.versionView2.textContainer()).size textAnchor2 = 4 bottomToLogoViewBaseline = self.logoView.frame().origin[1] + 17 textSeparation = 10 combinedHeight = textSize1[1] + textSize2[1] + textSeparation self.versionView2FinalPosition = NSRect(((frame.size[0] - textSize2[0]) / 2.0, (bottomToLogoViewBaseline - combinedHeight) / 2.0), (textSize2[0], textSize2[1] + textAnchor2)) self.versionView2.setFrame_(self.versionView2FinalPosition) self.versionViewFinalPosition = NSRect(((frame.size[0] - textSize1[0]) / 2.0, self.versionView2.frame().origin[1] + textSeparation + self.versionView2.frame().size[1]), (textSize1[0], textSize1[1] + textAnchor1)) self.versionView.setFrame_(self.versionViewFinalPosition) for _view in (self.dropboxView, self.logoView, self.versionView, self.versionView2): self.addSubview_(_view) return self
def initWithFrame_(self, frame): self = super(GreetingsTo, self).initWithFrame_(frame) if not self: return self.timers = [] for __text in ('greetings', 'to', 'AAPL', 'GOOG', 'MSFT', (':)', '_smile'), (':P', '_wink')): if type(__text) is str: _text = attr = __text else: _text, attr = __text vv = NSTextView.alloc().initWithFrame_(NSRect((0, 0), frame.size)) vv.setDrawsBackground_(NO) vv.setEditable_(NO) vv.setSelectable_(NO) vv.setAlignment_range_(NSCenterTextAlignment, NSMakeRange(0, vv.string().length())) vv.textStorage().beginEditing() vv.textStorage().mutableString().setString_(_text) vv.textStorage().setFont_(NSFont.labelFontOfSize_(42 if _text in ('greetings', 'to') else 36)) vv.textStorage().setForegroundColor_(NSColor.whiteColor()) vv.textStorage().endEditing() vv.layoutManager().glyphRangeForTextContainer_(vv.textContainer()) vv.setFrameSize_(vv.layoutManager().usedRectForTextContainer_(vv.textContainer()).size) setattr(self, attr, vv) vv.setHidden_(True) self.addSubview_(vv) self.blast_order = (self.greetings, self.to, self.AAPL, self.GOOG, self.MSFT, self._smile) self.greetings.setHidden_(False) self.greetings.setFrameOrigin_(((frame.size[0] - self.greetings.frame().size[0]) / 2.0, BASE_HEIGHT - 100)) self.to.setFrameOrigin_(((frame.size[0] - self.to.frame().size[0]) / 2.0, BASE_HEIGHT - 100 - self.greetings.frame().size[1] - 20)) offset = (frame.size[0] - (self.AAPL.frame().size[0] + self.GOOG.frame().size[0] + 60)) / 2.0 self.AAPL_POS = (offset, 220) self.GOOG_POS = (WIDTH - self.GOOG.frame().size[0] - offset, 220) self.MSFT_POS = ((frame.size[0] - self.MSFT.frame().size[0]) / 2.0, 200 - self.AAPL.frame().size[1] - 80) self._wink.setFrameOrigin_(((frame.size[0] - self._wink.frame().size[0]) / 2.0, 200 - self._wink.frame().size[1])) self._smile.setFrameOrigin_(((frame.size[0] - self._wink.frame().size[0]) / 2.0, 200 - self._wink.frame().size[1])) return self
def drawTextAtPoint(self, text, textPosition, textAlignment=3, fontSize=9.0, fontColor=NSColor.brownColor()): """ Use self.drawTextAtPoint("blabla", myNSPoint) to display left-aligned text at myNSPoint. """ try: glyphEditView = self.controller.graphicView() fontAttributes = { NSFontAttributeName: NSFont.labelFontOfSize_(fontSize), NSForegroundColorAttributeName: fontColor } displayText = NSAttributedString.alloc( ).initWithString_attributes_(text, fontAttributes) displayText.drawAtPoint_alignment_visibleInRect_( textPosition, textAlignment, NSMakeRect(NSNotFound, 0, 0, 0)) except Exception as e: self.logToConsole("drawTextAtPoint: %s" % str(e))
def initWithFrame_(self, frame): self = super(GreetingsToView, self).initWithFrame_(frame) if not self: return None self.timers = [] poem = ('thanks for watching!', 'we love working on', 'Dropbox', 'and we really hope', 'it makes your life', 'easier.', '~~~', 'remember,', "do what's right", 'love thy neighbor', 'and', 'be yourself', '<3', '~~~', 'find us on the web at', 'http://dropbox.com/', '~~~', '4/15/2011') self.views = [] total_height = 0 for a in poem: vv = NSTextView.alloc().initWithFrame_(NSRect((0, 0), frame.size)) vv.setDrawsBackground_(NO) vv.setEditable_(NO) vv.setSelectable_(NO) vv.setAlignment_range_(NSCenterTextAlignment, NSMakeRange(0, vv.string().length())) vv.textStorage().beginEditing() vv.textStorage().mutableString().setString_(a) vv.textStorage().setFont_(NSFont.labelFontOfSize_(14)) vv.textStorage().setForegroundColor_(NSColor.colorWithCalibratedRed_green_blue_alpha_(1.0, 1.0, 1.0, 0.0)) vv.textStorage().endEditing() vv.layoutManager().glyphRangeForTextContainer_(vv.textContainer()) size = vv.layoutManager().usedRectForTextContainer_(vv.textContainer()).size vv.setFrameSize_(size) total_height += size[1] self.addSubview_(vv) self.views.append(vv) SPACING = 11 total_height += SPACING * (len(self.views) - 1) placement = frame.size[1] - (frame.size[1] - total_height) / 2.0 for a in self.views: w, h = a.frame().size placement -= h a.setFrameOrigin_(((frame.size[0] - w) / 2.0, placement)) placement -= SPACING return self
self._callback = None self.w.close() def okCallback(self, sender): self.w.close() value = self.w.lineInput.get() if value is not None: self._callback(value) self._callback = None # ----------------- # Line Number Ruler # ----------------- rulerFont = NSFont.labelFontOfSize_( NSFont.systemFontSizeForControlSize_(NSMiniControlSize)) class DefconAppKitLineNumberView(NSRulerView): def init(self): self = super(DefconAppKitLineNumberView, self).init() self._existingText = None self._existingClientViewWidth = None self._lineRects = [] return self def dealloc(self): notificationCenter = NSNotificationCenter.defaultCenter() notificationCenter.removeObserver_(self) super(DefconAppKitLineNumberView, self).dealloc()
self._callback = None self.w.close() def okCallback(self, sender): self.w.close() value = self.w.lineInput.get() if value is not None: self._callback(value) self._callback = None # ----------------- # Line Number Ruler # ----------------- rulerFont = NSFont.labelFontOfSize_(NSFont.systemFontSizeForControlSize_(NSMiniControlSize)) class DefconAppKitLineNumberView(NSRulerView): def init(self): self = super(DefconAppKitLineNumberView, self).init() self._existingText = None self._existingClientViewWidth = None self._lineRects = [] return self def dealloc(self): notificationCenter = NSNotificationCenter.defaultCenter() notificationCenter.removeObserver_(self) super(DefconAppKitLineNumberView, self).dealloc()