スマートフォンなどの特別な環境下にない場合はすべて XXaml 側で処理できるようにして簡単にエントリーポイントから起動できるようにしようと思う。それについて各言語こんな感じになるという見え方を書くだけ。
Windows/OS X/Linux
Windows, OS X, Linux では OS との連携が弱いので、閉じたエコシステム系を形成しようと思う。つまり、XXaml 側による完全支配。 (manage all systems by xxaml)
C++
xxaml::application::start( [] { your::app app; app.Run(); } );
C
XXaml.Application.Start( () => { var app = new Your.App(); app.Run(); } );
VB
XXaml.Application.Start( Sub() Dim app = New Your.App() app.Run() End Sub)
Java 5-7
xxaml.application.start( new ApplicationInitializationCallback() { @Override public void initialized() { final Your.App app = new Your.App(); app.run(); } });
Java 8
xxaml.application.start( () -> { final Your.App app = new Your.App(); app.run(); });
iOS/Android
iOS はまだ検証してないのでごめんなさい。
Android は検証してるけど、1 Activity = 1 Window = 1 Frame = n Pages
にしようと思って、Android の App と XXaml の Application は関与しない感じにしようと思ってる。既存の axml な UI と XXaml の UI を併用可能にしてメリットを得られる?
なぜこのような形にしたかというと、Android は共有のための Intent などが存在するから。共有のための Intent のページは Activity である必要があり、それを処理するのに Activity をうまく使う方が Android 開発には便利だから。
とりあえず Java からのことしか考えてません。C++ だけの閉鎖空間による API 設計はまだ考えてない模様。
Android-java
package test.androidxxaml.demo; import android.app.Activity; import android.os.Bundle; public class XXamlActivity extends Activity { @Override public void onCreate( Bundle savedInstanceState ) { super.onCreate(savedInstanceState); this.setContentView(R.layout.xxaml_main); // OpenGL の Surface のみ書かれてる (?) xxaml.application.load(); // load global and theme resource final CoreWindow window = new xxaml.ui.core.CoreWindow(); window.bind( this ); // bind this activity } @Override public void onDestory() { super.onDestory(); xxaml.application.shutdown(); // release global, theme, xxaml, and native resource } }
まだイメージ。ただ、これ XXaml-Android の標準クラスとして搭載するからあんまり気にしなくてもいいのかも。XXamlActivity を継承して読み込むページを指定すれば簡単にロードできるようにしたらベストなのかもね。
このあたりはどういう設計がいいのかまだまだ寝る。
まとめ
2 つのプラットフォームの違いからこんな定義になってしまったけど、Android とか iOS はまだまだ研究が必要だと思う。そのために Android のソースコード読まないといけないからまだ先だと思う。
とりあえずメモ程度です。