まず以下のようなWikipediaSaverLoader.m
を作る。
RBBundleInit
が
RubyCocoaを初期化しRubyプログラムをロードする関数で、
Leopardの/Developer/Examples/RubyCocoa/RubyAnywhere/
などに使用例がある。
#import <Cocoa/Cocoa.h> #import <RubyCocoa/RBRuntime.h> #import <ScreenSaver/ScreenSaver.h> #import <WebKit/WebKit.h> @interface WikipediaSaverLoader : ScreenSaverView { id wikipediaSaver; } @end @implementation WikipediaSaverLoader - (id)initWithFrame:(NSRect)frameRect isPreview:(BOOL)preview { [super initWithFrame:frameRect isPreview:preview]; static int installed = 0; if (! installed) { if (RBBundleInit("WikipediaSaver.rb", [self class], nil)) NSLog(@"WikipediaSaverLoader.install: failed"); else { NSLog(@"WikipediaSaverLoader.install: success"); installed = 1; } Class rubyClass = NSClassFromString(@"WikipediaSaver"); NSAssert(nil != rubyClass, @"could not find Ruby class"); wikipediaSaver = [[rubyClass alloc] initWithFrame:frameRect isPreview:preview]; NSAssert(nil != wikipediaSaver, @"Ruby instance should not be nil"); [wikipediaSaver setSaver:self]; } return self; } - (NSTimeInterval) animationTimeInterval { return [wikipediaSaver animationTimeInterval]; } - (void)animateOneFrame { [wikipediaSaver animateOneFrame]; } @endこれをスクリーンセーバとして登録すると
animateOneFrame
が定期的にシステムから呼ばれるので、
そこからRubyCocoaプログラムを呼ぶようにすればよい。
スクリーンセーバ本体のWikipediaSaver.rb
は以下のようにRubyで記述することができる。
ここでは15秒おきにWikipediaのランダムページを表示するようにしている。
require 'osx/cocoa' include OSX require_framework 'ScreenSaver' require_framework 'Webkit' class WikipediaSaver < ScreenSaverView def initWithFrame_isPreview(frameRect,p) super_initWithFrame_isPreview(frameRect,p) end def animateOneFrame @webView.mainFrame.loadRequest(@request) end def animationTimeInterval 15 end def setSaver(saver) @saver = saver setup end def setup url = "http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:Random" @nsurl = NSURL.URLWithString(url) screenRect = NSScreen.mainScreen.frame @webView = WebView.alloc.initWithFrame(screenRect) @saver.addSubview(@webView) @request = NSURLRequest.requestWithURL(@nsurl) @webView.mainFrame.loadRequest(@request) end end
2008/1/18 Toshiyuki Masui @ Pitecan.com