Misya ScreenObjects (ScreenObjects, was:GSSO, ShiaSO)

ScreenObjects

概要

画面描画の為のシステムです。
画面に描画されるべきモノの一覧を、それぞれに属性付きで保持し
それらについて実際の描画を行うモノです。

経緯

Shia v0.1においてカスタムGUI記述用の言語として策定された「TSB ScreenObjects」を
v0.3でShiaGSに取り込む際に拡張・名前変更したものが「Shia ScreenObjects」です。
で、ShiaGSに取り込まれた物が「GSSO」となります。
そっからさらにMisyaに取り込まれたので、「MisyaScreenObject」になりました。
けど、基本的にはどれも「ScreenObjects」です。

MisyaSOはShiaのGUI全般を担うMisyaの基礎だったりします。

重要な項目の割に位置づけが難しく、よく名前が変わります。
TSBSO: shia v0.1
ShiaSO: shia v0.2~
GSSO: shia v0.3~
MisyaSO: shia v0.4~

特徴

ScreenにObjectを配置する感じでやってきます。

それだけだと静的表現しか出来ませんが、
そこにSOScriptをぶちこむ利用する事で
動的な表現を可能にしています。
イメージとしてはDHTML+JavaScriptに近い感じ。

TSBff:objectsWithValuesで記述するのがフツーですが
たぶんxmlでもできるっしょ

座標系

ScreenObjectの座標系は、現在審議中です。
v0.4までは暗黙の左下原点でしたが、v0.5以降は未定です。

左下原点だったのはCocoaが左下原点だった事によります。
ShiaPlayer.app, ArteMisyaでは左下原点になっています。
けれども、iPhoneOSは左上座標系・・・orz

Object

画面に配置する『モノ』です。
型と属性を持ちます。

TSBSO時代にObjectと呼ばれてたのがScreenObjectsの由来になります。
GSSOではElementと名前が変わりましたが、MisyaSOでObjectに戻りました。

Objectにはいくつかの型があります。
(ちなみにこの型はElement時代は種類と呼ばれてました)

Objectの型

ImageObject
画像のObjectです。
TextObject
文字列のObjectです。
EventObject
イベントハンドリング用のですが、今の所、廃止になってます。
もしかしたらいつか復活する事かもしれません。
RectangleObject
四角形のObject。
領域内を[塗りつぶし/枠/点枠/消去/ハイライト]とかできます。
ScriptObject
GSSOからの。スクリプト拡張の為に。
ScreeObject
現在のスクリーンの情報を保持するオブジェクト。
スクリーンの大きさ、モード、他を設定するのに利用。
1スクリーンに1オブジェクトのみ存在可能。

その他の型
その他、環境によって型が追加定義される事があります。

Property -- 属性

各Objectは様々な属性を持ちます。
(そもそもObjectの種類も属性の一つですが)
Propertyformatdef-valexplain
共通:基本
namestring-名前。
SOScriptからアクセスするのに必要。
color#RRGGBB/
white/lightgray/
gray/black/
red/blue/
green/yellow/
brown/purple/
orange
-色。
HTMLっぽい表記(16進数6桁なRGB)か、
プリセットな色名で。
zoomfloat1.0拡大率。
1.0で等倍、0.5で1/2倍、2.0で二倍
fractionfloat(0.0-1.0)1.0透過度、α値。
1.0で完全不透明、0.0で完全透明
visibleyes/noyes可視状態。
不可視だとマウスイベント受け取れない
selectableyes/nono選択可否。
可能だとキーボード操作で選択可能
pointableyes/nono選択可否。
可能だとマウス操作で選択可能
selectedyes/nono初期選択状態。
yesだと初期状態で選択(focus)されます。
複数同時選択ができないハズなので
複数のObjectがyesだと困ります。
複数のselectedが存在した場合の挙動は未定義ですが
慣習的に最後のselectedが優先されるのが妥当のようです。
共通:座標系
atx,y0,0座標。rectと排他
sizewidth,height0,0大きさ。rectと排他
rectx,y,width,height0,0,0,0領域。at,sizeと排他
at/sizeとrectは排他指定ですので、両方指定された場合の挙動は未定義です。
またいくつかのobjectではコンテンツに合わせてsizeを自動で設定する事がありますが
ここでのsize指定を優先します。
mouseRectx,y,width,height0,0,0,0廃止。
マウスイベントの対象領域
共通:イベント
onRunSOScript code-選択状態から決定された時、実行されるコード
onFocusSOScript code-選択状態になった時、実行されるコード
onBlurSOScript code-選択状態が解除された時、実行されるコード
固有:Image Object
imagefile-画像ファイル名
fixableboolyes画像読み込み時に自動でサイズ変更を行う。
operationover/copy/
clear/destout/
xor/darker/
lighter/highlight
over描画モード。
通常/透過無視/消去/切り取り?/
bit反転?/暗く/明るく/ハイライト
固有:String Object / Text Object
stringstring-String Object: 表示する文字列
textstring-Text Object: 表示する文字列、
text属性は「\n」を考慮します。
fontnamefont name(Array?)Osaka-Monoフォント名。
そのうちに複数列挙可能にするかも。
fontsizefont size (pt)SystemFontSize
(14pt?)
フォントサイズ
textlayoutleftbottom/lefttopleftbottomatもしくはrectの表現する四角内で
leftbottom: 左下から開始
lefttop: 左上から開始
(color)colorblack?color属性で指定された色を
文字色として用います。
固有:Rectangle Object
fillmodefill/frame/dotted/
erase/highlight
frame描画モード。
塗り潰し/枠/点線枠/
消去/ハイライト
固有:Event Object Event Objectは廃止されました。
onMouseDownSOScript-廃止
onMouseUpSOScript-廃止
onMouseMoveSOScript-廃止
onKeyDownSOScript-廃止
onKeyPressSOScript-廃止。ってゆうかコレ何?
onKeyUpSOScript-廃止
onFocusMoveSOScript-廃止
onLoadSOScript-廃止
onUnloadSOScript-廃止
onErrorSOScript-廃止
Propertyformatdef-valexplain


ArteMisya拡張

ArteMisyaでは、MisyaをArteOGL上に構築している為に
いくつかの機能をそのまま用いる事が出来るようになっています。
Propertyformatdef-valexplain
ArteMisya拡張共通:基本
rotationradian(float)0角度。
rotationOriginx,y0,0回転の中心。
rotationSpeedradian per frame0回転速度
Propertyformatdef-valexplain

未定義の属性

Objectが未定義の属性を持つ事について、これに制限はありません。

これを利用して特定値の値や、スクリプトコードなどを値として持たせる事が出来ます。
このテクニックはSOScriptを用いる場合に必要になるでしょう。

利用例:(文字と画像の内容を同時に消している)
[text
group msg
clear $text ;
[image
group msg
clear $image ;

@forgroup msg &clear

ただし「__」から始まる属性は、処理系内部属性として予約されています。