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 でアプリにすることもできるはず。
問題はコード分割が現状できないことなんだが。