Кнопка какао, которая загорится при наведении мыши - PullRequest
8 голосов
/ 10 ноября 2009

Есть ли флаг, который можно установить, при котором кнопка Какао будет подсвечена при ее наведении. Мне нужно это программно с целью C на OSX.

Ответы [ 2 ]

15 голосов
/ 10 ноября 2009

Установите область отслеживания для вида с помощью addTrackingArea (при условии, что вы используете Leopard или более новую версию OS X). Вы получите события при входе и выходе мыши.

1 голос
/ 23 января 2016

что-то ниже, может быть, ответ.

class HoverButton: NSButton{

var backgroundColor: NSColor?
var hoveredBackgroundColor: NSColor?
var pressedBackgroundColor: NSColor?

private var hovered: Bool = false

override var wantsUpdateLayer:Bool{
    return true
}

required init?(coder: NSCoder) {
    super.init(coder: coder)
    self.commonInit()
}

override init(frame frameRect: NSRect) {
    super.init(frame: frameRect)
    self.commonInit()
}

func commonInit(){
    self.wantsLayer = true
    self.createTrackingArea()
    self.hovered = false
    self.hoveredBackgroundColor = NSColor.selectedTextBackgroundColor()
    self.pressedBackgroundColor = NSColor.selectedTextBackgroundColor()
    self.backgroundColor = NSColor.clearColor()
}

private var trackingArea: NSTrackingArea!
func createTrackingArea(){
    if(self.trackingArea != nil){
        self.removeTrackingArea(self.trackingArea!)
    }
    let circleRect = self.bounds
    let flag = NSTrackingAreaOptions.MouseEnteredAndExited.rawValue + NSTrackingAreaOptions.ActiveInActiveApp.rawValue
    self.trackingArea = NSTrackingArea(rect: circleRect, options: NSTrackingAreaOptions(rawValue: flag), owner: self, userInfo: nil)
    self.addTrackingArea(self.trackingArea)
}

override func mouseEntered(theEvent: NSEvent) {
    self.hovered = true
    NSCursor.pointingHandCursor().set()
    self.needsDisplay = true
}

override func mouseExited(theEvent: NSEvent) {
    self.hovered = false
    NSCursor.arrowCursor().set()
    self.needsDisplay = true
}

override func updateLayer() {
    if(hovered){
        if (self.cell!.highlighted){
            self.layer?.backgroundColor = pressedBackgroundColor?.CGColor
        }
        else{
            self.layer?.backgroundColor = hoveredBackgroundColor?.CGColor
        }
    }
    else{
        self.layer?.backgroundColor = backgroundColor?.CGColor
    }
}

}

ссылка: https://github.com/fancymax/HoverButton

...