今日の大口町。
チョウゲンボウ、ハヤブサ(スズキ)じゃないようで残念。
今日の収穫は以上、いやアオサギやダイサギは沢山いたんだけど。
って本当に野鳥ブログにするんかい。
いいかげんにプログラミングを再開しよう。
とりあえず macOS 用 RAW 画像選別アプリのほうを。
まずピンチを実装したい、トラックパッドで拡大縮小ね。
標準アプリはあたりまえにできるけど実装しなきゃできない。
cocoa – -[NSResponder swipeWithEvent:] not called – Stack Overflow
最初にまんまコレやって失敗した。
だってメソッド名がまぎらわしいんだもんもん。
Cocoaの日々: 1月 2011
こっちでいい、なんだ日本語で見つかるジャン。
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 等と全然違う。
コレ違うだろって感じ、もう少し調べなきゃ。