hideyaS
@hideyaS (hideya)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

MacOSでカーソルポインターを作りたい。

解決したいこと

Macで、カーソルの周りに赤丸を表示したい。

Swift,XcodeでMacOS用のカーソルポインターを開発しています。
左クリックを検知することはできたのですが、その時にカーソルの周りに赤丸を表示しようとしてもできませんでした。

常駐アプリとして開発しているので、Viewはないです。

trackingAreaも使えないし、
NSScreen.mainにはaddSubViewのようなメソッドもないので
とても困っています。

そもそもが何か違うのでしょうか?
それとも何か解決策はあるのでしょうか?

該当するソースコード

下記のようにカスタムクラスを作って、それをAppDelegate.swiftの方で呼んであげています。

MouseHighlight.swift
//
//  MouseHighlight.swift
//  MouseTest
//
//

import Foundation
import Cocoa

class MouseHighlight: NSView {
    
    private var trackingArea: NSTrackingArea?
    
    private var eventMonitor: Any?
    
    private func handlerMouseClickedMask(event: NSEvent) {
        print("OK!")
        
        print("x ->\(NSEvent.mouseLocation.x)")
        print("y ->\(NSEvent.mouseLocation.y)")
        let x = NSEvent.mouseLocation.x
        let y = NSEvent.mouseLocation.y
        
        //        let image = NSImage(named: "StatusBarButtonImage")
        //        let size = CGSize(width: 50, height: 50)
        //        let rect = NSRect(origin: .zero, size: size)
        //        let cursor = NSCursor(image: image!, hotSpot: .zero)
        //        addCursorRect(rect, cursor: cursor)
        
        
    }
    
    public func start() {
        stop()
        eventMonitor = NSEvent.addGlobalMonitorForEvents(matching:.leftMouseDown ,handler:self.handlerMouseClickedMask(event:))
        
    }
    
    public func stop() {
        guard let eventMonitor = eventMonitor else {
            return
        }
        
        NSEvent.removeMonitor(eventMonitor)
        self.eventMonitor = nil
        
    }
    
}

AppDelegate.swift
//
//  AppDelegate.swift
//  MouseTest
//
//

import Cocoa


class AppDelegate: NSObject, NSApplicationDelegate {

    func applicationDidFinishLaunching(_ aNotification: Notification) {
        // Insert code here to initialize your application
        
        let options = NSDictionary(object: kCFBooleanTrue, forKey: kAXTrustedCheckOptionPrompt.takeUnretainedValue() as NSString) as CFDictionary
        let trusted = AXIsProcessTrustedWithOptions(options)
       let mouseHighlight = MouseHighlight()
        if(trusted) {
            mouseHighlight.start()
        }
        
    }

    func applicationWillTerminate(_ aNotification: Notification) {
        // Insert code here to tear down your application
    }

    func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool {
        return true
    }

}


自分で試したこと

addCursorRectを使ってみましたがダメでした。

ほとんど手が出ない状況で申し訳ないのですが、助けていただくと幸いです。

0

1Answer

環境がない(Swift,Xcode使ってない)ので試せないので、調べて疑問に思ったこと。
addCursorRect(rect, cursor: cursor)
引数が
rect: rect
でなくてよいのですか?

0Like

Comments

  1. @hideyaS

    Questioner

    そうでなくて大丈夫です。

Your answer might help someone💌