1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- //
- // KMCoverButton.swift
- // PDF Reader Pro
- //
- // Created by wanjun on 2023/10/7.
- //
- import Cocoa
- @objc enum KMCoverAction: Int {
- case enter = 0
- case move
- case exit
- }
- @objcMembers
- class KMCoverButton: NSButton {
-
- var coverAction: ((_ button: KMCoverButton, _ actionType: KMCoverAction) -> Void)?
- private var area: NSTrackingArea?
-
- deinit {
- if let trackingArea = area {
- self.removeTrackingArea(trackingArea)
- }
- }
- override func updateTrackingAreas() {
- super.updateTrackingAreas()
- if let existingArea = self.area {
- self.removeTrackingArea(existingArea)
- self.area = nil
- }
- let opts: NSTrackingArea.Options = [.mouseEnteredAndExited, .mouseMoved, .activeAlways]
- self.area = NSTrackingArea(rect: bounds, options: opts, owner: self, userInfo: nil)
- if let trackingArea = self.area {
- self.addTrackingArea(trackingArea)
- }
- }
-
- override func mouseEntered(with event: NSEvent) {
- if let coverAction = coverAction {
- coverAction(self, .enter)
- }
- }
-
- override func mouseExited(with event: NSEvent) {
- if let coverAction = coverAction {
- coverAction(self, .exit)
- }
- }
- override func mouseMoved(with event: NSEvent) {
- if let coverAction = coverAction {
- coverAction(self, .move)
- }
- }
- }
|