SuperCollider3.3になってアップデートされたというGUIのヘルプファイル、「GUI Overview and Introduction」を、翻訳する時間もスキルも無いので、あくまで流し読みます。
——
Basic usage: Kits and Syntax
GUIを扱うには2つの基本的なクラスがあるらしい。SCWindowとJSCWindow。
SCWindowはMacで、JSCWindowはそれ以外かな?
Basic Usage: Windows, Containers and Decorators
ウィンドウの作り方はほぼ変わらずというか変えなくてもよくて、Windowと書けばMacならSCWindowが呼び出されると言うことのようです。
( // Window returns the window class for the current kit w = Window( "my name is...", Rect( 128, 64, 340, 360 )); w.front; )
Window内のパーツの配置の仕方は、ひとつずつ座標を指定するやり方と、作ったパーツ順に自動的にWindow内に詰めて流し込むやり方がある。CSSで言ったら position: absolute; か float: left; のような感じ。当然フロートの方がらくちん。
やりかたはこれでOK
w.view.decorator = FlowLayout(w.view.bounds);
流し込むエリアもCompositeViewで複数設定できるらしい。知らなかった…
そもそもWindow自体CompositeViewのサブクラスなんだとか。
( w=Window.new.front; w.view.decorator = FlowLayout(w.view.bounds); // notice that FlowView refers to w.view, not w v=CompositeView(w, Rect(5,5,190,390)); v.background = Color.rand; // set the color v.decorator = FlowLayout(v.bounds); 14.do{ Slider(v, 180@20).background_(v.background) }; )
vで設定した範囲内にスライダーが流し込まれます。
Window Coordinates
ミニ情報的な感じで。SuperColliderのウィンドウはスクリーンの左下が基準なので何かと扱いづらい。そんなときはウィンドウの高さを取得すればいいよ、と。
( w=Window.new("A Precisely Placed Window", Rect(100, Window.screenBounds.height-300, 300, 200 ) ).front; )
ウィンドウの高さを取得して、そこから300px引いた数値を基準点とする。ウィンドウの高さが200pxなので、画面の上端からは100px離れてるよ、と。
Actions: Performing Things with a GUI Widget
アクションを設定するには。スライダーなどのGUIのactionメソッドに書く。
( w = Window ("A Slider"); a = Slider (w, Rect(40, 10, 300, 30)); a.action={ |sl| sl.value.postln }; // set the action of the slider w.front );
SuperColliderの「|sl|」という引数の受け方がいまいちなじめないが…
アクションを追加するにはaddActionメソッド、削除するにはremoveActionメソッドを使う。
// adding and removing an action: f = { |sl| "--------*******-------".postln; }; a.addAction(f); a.removeAction(f);
この辺はすごく分かりやすい。
Asynchronous GUI Techniques: Communicating with the Sound Server
GUIとサウンドサーバの間の非同期通信。必要性・内容ともにいまいちつかめず。
ただ、サンプル中のNumberBoxと言うクラスは便利ですね!
NumberBoxで生成したテキストフィールドをクリックし、上下へのドラッグや上下矢印キーの入力で、テキストフィールド内の数字を増減できる。何かと使えそう。
——–
ううむ。次はGUI Classesを流し読みます。