Safari からのアクセスが微妙に増えている気がする。
筆者は Fedora メインで mac はサブなので mac ネタなんてほとんど無いのに。
でもそういえば macOS も bash だし fedora よりユーザーは当然多いし。
Comipoli の macOS 版を JXA で作る計画は一応あるんだけど。
cbz を Finder でサムネイル表示できない macOS で意味あるんだろうか?
てか筆者は Cocoa の知識はほとんど無い。
しかも Objective-c から JavaScript へ変換という情報がほぼ無いことが必要。
そもそも NSWindow の配置はレイアウタなのか絶対位置なのかさえ知らない。
よし解らないなら実験だ、NSImageView を 2 つ置いて並べてみよう。
#!/usr/bin/osascript ObjC.import("Cocoa"); const P_LEFT = $("/Users/sasakima-nao/Pictures/三嶋ゆらら.jpg"); const P_RIGHT = $("/Users/sasakima-nao/Pictures/優木苗.jpg"); ObjC.registerSubclass({ name: 'WinDelegate', //superclass: 'NSObject', protocols: ['NSWindowDelegate'], methods: { // メソッド名は合体しない 'windowDidResize:': { types: ['void', ['id']], implementation: function(aNotification) { fitImage(); } }, 'windowWillClose:': { types: ['void', ['id']], implementation: function(notification) { return app.terminate(0); } } } }); /** * func */ var fitImage = ()=> { let aw = window.frame.size.width; let ah = window.frame.size.height; let iw = leftView.image.size.width; let ih = leftView.image.size.height; // left let f = leftView.frame; f.size = $.NSMakeSize(aw/2, ah); leftView.frame = f; // right f = rightView.frame; f.size = $.NSMakeSize(aw/2, ah); f.origin = $.CGPointMake(aw/2, 0); rightView.frame = f; } var createImageView = (path)=> { let image = $.NSImage.alloc.initWithContentsOfFile(path); let view = $.NSImageView.new; view.setImageScaling($.NSScaleToFit); view.setImage(image); return view; } /** * image */ leftView = createImageView(P_LEFT); rightView = createImageView(P_RIGHT); /** * Window */ let window = $.NSWindow.alloc.initWithContentRectStyleMaskBackingDefer( $.NSMakeRect(0, 0, 320, 400), $.NSTitledWindowMask | $.NSClosableWindowMask | $.NSMiniaturizableWindowMask | $.NSResizableWindowMask, $.NSBackingStoreBuffered, false ); window.title = $("comipoli"); //window.center; window.orderFrontRegardless; window.delegate = $.WinDelegate.new; window.contentView.addSubview(leftView); window.contentView.addSubview(rightView); window.makeKeyAndOrderFront(window); fitImage(); /** * Application */ let app = $.NSApplication.sharedApplication; app.setActivationPolicy($.NSApplicationActivationPolicyRegular); app.mainMenu = function() { function newMenu(title, action, key) { return $.NSMenuItem.alloc.initWithTitleActionKeyEquivalent(title, action, key); } const appName = "Test Window"; const mainMenu = $.NSMenu.new; const itemApp = $.NSMenuItem.new; const menuApp = $.NSMenu.new; itemApp.submenu = menuApp; mainMenu.addItem(itemApp); menuApp.addItem(newMenu(`Quit ${appName}`, 'terminate:', 'q') ); return mainMenu; }(); app.run;
class 使いたい…
うん絶対位置配置なんだね。
macOS にも unzip はあるし意外に移植は簡単そうだ。
osacompile でアプリにすることもできるはず。
問題はコード分割が現状できないことなんだが。