今日の大口町。
チョウゲンボウ、ハヤブサ(スズキ)じゃないようで残念。
今日の収穫は以上、いやアオサギやダイサギは沢山いたんだけど。
って本当に野鳥ブログにするんかい。
いいかげんにプログラミングを再開しよう。
とりあえず macOS 用 RAW 画像選別アプリのほうを。
まずピンチを実装したい、トラックパッドで拡大縮小ね。
標準アプリはあたりまえにできるけど実装しなきゃできない。
cocoa – -[NSResponder swipeWithEvent:] not called – Stack Overflow
最初にまんまコレやって失敗した。
だってメソッド名がまぎらわしいんだもんもん。
こっちでいい、なんだ日本語で見つかるジャン。
NSResponder の magnifyWithEvent メソッドね。
ただ setFrameSize するのはどうなんだ。。。。。
拡大や縮小を指定し再描写にする。
#!/usr/bin/env python3 from AppKit import * # Kill of control+C import signal signal.signal(signal.SIGINT, signal.SIG_DFL) PATH = 'P1012925.RW2' # LUMIX(Panasonic) RAW image RECT = NSMakeRect(0, 0, 600, 400) wins = [] class RawView(NSView): def initWithFrame_(self, rect): objc.super(RawView, self).initWithFrame_(RECT) self.image = NSImage.alloc().initWithContentsOfFile_(PATH) self.draw_size = 1 #self.setWantsRestingTouches_(True) # ? return self def acceptsFirstResponder(self): return True def magnifyWithEvent_(self, event): print(event.magnification()) if event.magnification() != 0: self.draw_size = event.magnification() + 1 self.display() def swipeWithEvent_(self, event): print('swipe') def keyDown_(self, event): print('key down test') def mouseDown_(self, event): print('mouse down test') def drawRect_(self, rect): NSColor.blackColor().set() NSRectFill(rect) aw = rect.size.width * self.draw_size ah = rect.size.height * self.draw_size w = self.image.size().width h = self.image.size().height if aw * h > ah * w: width = w * ah / h height = ah x = (aw - width) / 2 y = 0 else: width = aw height = h * aw / w x = 0 y = (ah - height) / 2 r1 = NSMakeRect(x, y, width, height) self.image.drawInRect_(r1) class MyWindow(NSWindow): def init(self): objc.super(MyWindow, self).initWithContentRect_styleMask_backing_defer_( RECT, NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask | NSMiniaturizableWindowMask, NSBackingStoreBuffered, False) # NSView self.rawview = RawView.alloc().initWithFrame_(RECT) self.contentView().addSubview_(self.rawview) # self self.setTitle_('RAW image Viewer') return self class AppDelegate(NSObject): def applicationDidFinishLaunching_(self, notification): window = MyWindow.new() window.makeKeyAndOrderFront_(window) # save wins.append(window) # Activate NSApp.activateIgnoringOtherApps_(True) class AppMenu(NSMenu): def init(self): objc.super(AppMenu, self).init() item_app = NSMenuItem.new().autorelease() self.addItem_(item_app) menu_app = NSMenu.new().autorelease() item_app.setSubmenu_(menu_app) # quit menu item_quit = NSMenuItem.new().autorelease() item_quit.initWithTitle_action_keyEquivalent_('Quit App', 'terminate:', 'q') menu_app.addItem_(item_quit) return self pool = NSAutoreleasePool.new() NSApplication.sharedApplication() NSApp.setMainMenu_(AppMenu.new().autorelease()) NSApp.setDelegate_(AppDelegate.new().autorelease()) NSApp.run()
できたけど。
拡縮の原点は左下、ジェスチャ終了でゼロを投げてくる。
数値はアクション毎にリセット、うーん計算が難しい。
てかレスポンスが酷い、Preview.app 等と全然違う。
コレ違うだろって感じ、もう少し調べなきゃ。