Cake.jsを解析してみる
経緯
HTML5のCanvasで、過去に作ったFlash(ムービーじゃないよ)を実装し直そうとしたところ、マウスイベント処理がクソダラ面倒くさかったので、そのへん簡単にしてくれるライブラリを探していたら、Cake.jsというものに出会った。かなり昔からメンテナンスされ続けているライブラリのようなのだが、Google CodeのWikiには、クラスやメソッドが網羅されていなかったり、JSDocも各クラスを__global__のフィールドとして名前と概要が掲載されているだけで、リファレンス的な使い方ができない。幸い、ソースコードは圧縮されていなかったので、いっその事7000行を超えるソースコードを読んで、(最低でもせめて自分が把握できる範囲で)クラスとメソッドを書きだしていきたいなぁ、と思った次第であります。
注意
JavaScriptの特性上、それが「クラス」なのか「メソッド」なのか「フィールド」なのかがすごく曖昧なので、下記のような定義の元、カテゴリ分けしている。
Cake.jsのクラスやメソッドなど
クラス一覧
- Object
- ネイティブObjectクラスを拡張している
- Array
- ネイティブArrayクラスを拡張している
- Function
- ネイティブFunctionクラスを拡張している(ブラウザ間差異の吸収?)
- String
- ネイティブStringクラスを拡張している(ブラウザ間差異の吸収?)
- Math
- ネイティブMathクラスを拡張している(ブラウザ間差異の吸収?)
- RecordingContext
- 基本クラス。よくわかんないけど、名前からして画面を記録してくれるのかしら。
- Transformable
- 静的メソッドを持つ抽象クラス。おそらく変形についてかんりしてるんだけど、抽象クラスなのか静的クラスなのかはっきりしろ。CanvasNodeクラスがこれを拡張している。
- Timeline
- 抽象クラス。フレームアニメーションが使えるようになる。cake.js自体にこのクラスを用いてるものはないが、自分でTimelineを伴ったクラスを設計する際に使用するものかと思われる。
- Animatable
- 抽象クラス。アニメーション可能にするためのクラスっぽい。CanvasNodeクラスがこれを拡張している。もちろん、静的メソッドを持つ。
- CanvasNode
- AnimatableクラスとTransformableクラスを拡張した、Cake.jsがデータを管理するためのクラス。Cake.js用Objectクラスか。
- Canvas
- CanvasNodeクラスを拡張した、Canvas管理クラス。
- LinkNode
- CanvasNodeクラスを拡張した、aタグに関するクラス。
- AudioNode
- CanvasNodeクラスを拡張した、音に関するクラス。なんかaudioタグとかでゴニョゴニョするっぽい?
- ElementNode
- CanvasNodeクラスを拡張した、HTMLタグ全般に関するクラス。コレ使って、任意のタグを生成してappendできる?
- Drawable
- CanvasNodeクラスを拡張した、Canvasに描画可能なオブジェクトのための抽象クラス。ASでいうところのDisplayObjectクラスみたいなもん?
- Line
- Drawableクラスを拡張した、直線クラス。
- Circle
- Drawableクラスを拡張した、円クラス。
- Ellipse
- Circleクラスを拡張した、Ellipseクラス。なにこれ?
- Spiral
- Drawableクラスを拡張した、スパイラルクラス。
- Rectangle
- Drawableクラスを拡張した、矩形クラス。
- Polygon
- Drawableクラスを拡張した、ポリゴンクラス。3Dできるの!?
- CatmullRomSpline
- Drawableクラスを拡張した、CatmullRomSplineクラス。なにこれ?
- Path
- Drawableクラスを拡張した、パスクラス。任意の形を作ることができる。普通にctx.beginPath();以降のmoveTo()とかlineTo()とかをオプションで指定してく感じ。
- ImageNode
- Drawableクラスを拡張した、画像クラス。
- TextNode
- Drawableクラスを拡張した、テキストクラス。
- Gradient
- グラデーションを管理する基本クラス。
- Pattern
- パターンを管理する基本クラス。
静的メソッド管理クラス
グローバルメソッド一覧
- $A(obj:Array)
- Arrayインスタンスのコピーを返すメソッド
- $(id:String)
- return document.getElementById(id);
- T
- T(str:String) : return docuemnt.createTextNode(str);
- Klass
- クラスを作るメソッド。継承とかそのへんを可能にする。
グローバルフィールド一覧
- window.requestAnimFrame
- ブラウザごとに異なるrequestAnimationFrame系のフィールドをラップしている
- Browser
- UAをラップしてる
とりま
ここまでは、JSDocと大差ないが、大雑把に全体像がつかめるような気がする。