Morphic
のはなし
Morphic
フレームワーク
Squeak で採用の GUI フレームワーク
2.x までは MVC 、 3.x 系から Morphic が 標準
世間一般の Squeak のイメージは概ね
出自
Self4.0 の GUI フレームワークとして
1995 年 Sun Microsystems
John Maloney 、 Randy Smith
Squeak 向けに再実装
1997 年 Squeak1.19 ~
JavaScript 、 Python 、 Objective-C
設計思想
統一感 (uniformity)
画面部品はすべて Morph オブジェクト
具体性 (concreteness)
Morph オブジェクトに直接触れて、観察 したり、操作したりできる
生命感 (liveness)
Morph がそれぞれ自分で動く
統一感
(uniformity)
画面を構成する要素は、すべて Morph
オブジェクト
背景、マウスカーソル、ウィンドウ、ボタ ン、スクロールバー、幾何図形、 etc
具体性
(concreteness)
掴む、分解する、動かす、拡げる、縮
める、回転する、複製する、 etc
Halo( 後光 ) を通して様々なことがで
生命感
(liveness)
Morph オブジェクトが個々に勝手に判
断したり動いたりするようなイメージ
Morph
ギリシア語
姿 (Shape) 、形 (Form) に相当
画面構成要素の基本単位
MVC 、ないしは VC を担当する
「 V の数だけ C がある」なら VC は一体でいい
機能
自身を描画、表示する
入力を受け付ける
子 Morph を持てる
Morphic
プログラミング
ライブコーディング
やること
自身の描画
入力に対するインタラクション
子 Morph の追加
自身の描画
Morph>>drawOn: aCanvas
入力に対するインタラクショ
ン
Morph>>handlesMouseDown: aEvent
MouseDown イベントに反応するか?
Morph>>mouseDown: aEvent
子
Morph
の追加
Morph>>addMorph: aMorph
子 Morph は、レイアウトオプションに応じ て配置される
よく使うオプション設定
liveness
の実現
Morph>>step
Morph>>stepTime
Morphic の世界①
World を根とした木構造
GUI フレームワークが木構造なのは一般的
World( 背景 ) と ActiveHand( マウスカーソ ル ) がグローバル変数で特別扱い
World(ActiveWorld)
Morphic
の世界②
MorphicProject
WorldState World
UIProcess(Morphic Loop)
Morphic
ループ
繰り返し:
入力イベントの処理
Morph>>step の実行
レイアウト更新
画面更新
Windows のメッセージループ等と概
詳しくは
Project class>>spawnNewProcess
を起点に辿ると、ボンヤリと処理が見 えてくる
MorphicProject class(Project class)>>spawnNewProcess
UIProcess := [
[World doOneCycle. Processor yield. false] whileFal se: [].
Morphic
の利点・欠点
利点
直感的
柔軟
独自の世界を構築し易い
欠点
遅い
Morphic ループ以外のプロセスとの連携
独自のウィジット
参考文献
Squeak 入門
Squeak, Open Personal Computing and Multimedia
Draft: