A Day in the Life

2008-02-14

ProgrammaticSkin#drawRoundRect

引数の color について、ドキュメントには

color:Object (default = null) ? 塗りの RGB カラーです。null、uint、または Array を指定できます。null の場合、矩形は塗りつぶされません。uint である場合、塗りの RGB カラーを指定します。たとえば、赤で塗りつぶす場合は 0xFF0000 を渡します。Array である場合は、グラデーションカラーを指定する uint を含める必要があります。たとえば、赤黄青のグラデーションで塗りつぶす場合は、[ 0xFF0000, 0xFFFF00, 0x0000FF ] を渡します。グラデーション内で最大 15 のカラーを指定できます。デフォルト値は null (塗りなし) です。

と書いてある。が実際の実装は

else if (color is Array)
{
    var alphas:Array = alpha is Array ?
                       alpha as Array :
                       [ alpha, alpha ];

    if (!gradientRatios)
        gradientRatios = [ 0, 0xFF ];

    g.beginGradientFill(gradientType,
                        color as Array, alphas,
                        gradientRatios, gradientMatrix);
}

ちょwwおまww、alpha/gradientRation 指定してないと最大2色じゃんすか!!なんか嵌ったよ…。別メソッドを通して修正。

protected function drawRoundRectFixed(x:Number, y:Number, width:Number, height:Number,
        cornerRadius:Object = null, color:Object = null, alpha:Object = null, Matrix:Matrix 
        gradientType:String = "linear", gradientRatios:Array = null, hole:Object = id
{
    if(color is Array) {
        var len:uint = (color as Array).length;
        if (len > 2 && !(alpha is Array) && !(gradientRatios is Array)) {
            var _alpha:Object= alpha;
            alpha = [];
            gradientRatios = [];
            for (var i:uint = 0; i < len; i++) {
                alpha.push(_alpha);
                gradientRatios.push(Math.round(0xFF/len * i));
            }
        }
    }
    drawRoundRect(x, y, width, height, cornerRadius, color, alpha, gradientMatrix, Type, Ratios, hole);
}

fxspy

これぐらいの規模のライブラリだと swc にしないと fcsh 使っててもコンパイルにやたら時間がかかるようになってしまう。swc バイナリも配布されてるけど compc でコンパイル。Flex SDK のバージョン違うと Flex フレームワーク周りで不具合も出る可能性もあるので、自分のコンパイラのバージョンにあわせて自前でのコンパイルのほうがよい気がする。

めったに compc つかわんなー。

compc -is src -sp src -o fxspy.swc

で、できあがったファイルが

/home/gorou/svn/as3/fxspy/fxspy.swc (900514 bytes)

わおー 900KB ・・・。

Mac mini

買って良かった。やーまさか Mac 買って良かったなんて云う日が来るとは。PC部屋が狭くなるので、デスクトップがミドルタワーででかくて処分したくて。無難に考えるとMicroATX の小型の win マシンなんだけど、OSX 一つぐらいあってもいいかもなーちっこいし音静かだしということで Mac mini に。

デスクトップに求めてたのは

  • windows (というか fub) が動く
  • 小型で静か
  • WUXGA が DVI で写せる
  • iTunes が動く

だったので Mac mini は全部満たしてるよなーというわけで。win は VMWare Fusion で動かせばいいや。で、ヘラ買ってメモリ増設とかめんどくさそうだったので、秋葉館の HDD/メモリ増設モデルの

を買った。最初は bootcamp に XP 入れて(ちなみに FAT32 領域があったのでそこにでフォーマットせずにインストールしたらディスクエラーで嵌った。bootcamp の PDF に書いてある…。) VMWare Fusion をその bootcamp 領域から起動してたけど、bootcamp な領域だとサスペンドできなかったりディスク領域のダイナミックな変更が出来なかったりで結局 bootcamp は消してインストールし直し。windows お手軽インストールかなんかを使うとシリアル入れておくだけで何もせずに全自動インストール(VMWare tools インストールまで全自動)がめっちゃらくだった。

思った以上に VMWare Fusion のユニティモードはシームレスだし、fub もふつうに動くし結構快適。えくすぽぜーやすぽっとらいとも便利。設定・検索なんかも vista と比べても OSX のほうが解りやすいね。sshd や VNC(Apple Remote Desktop3)もデフォルトで入ってるのでリモートから繋ぐのもアレコレせずにすぐできたしなー。ちょっと sshd の設定でパスフレーズ認証はじくのに(use pam を no にする必要があった)手間取ったぐらいで。dotfiles はだいたい普通に動いたし(一部 zsh のシェルスクリプトがうまくうごいてない。俺の書き方が悪い)。

一番思わぬところで良かったのはスリープへの以降・復帰が超速いことで。電源押してから2,3秒でスリープ・5秒ぐらいで復帰。寝るときはスリープさせ(ちょっとでも音が聞こえると気になって眠りにくい)て、朝起きて復帰させてるけど全然区にならない。

というわけで Mac mini はいいなーと思いました。プログラミングするメインマシンで OSX 使う気にはまだならないけどね。やっぱりなんとなくのもっさり感がどうしても気になってしまう。

svn repos の変更

vim のレポジトリ(というか sourceforge.net 全般?)が変更になってた。久しぶりに switch --relocate。一年に一度ぐらいしか使わないコマンドだ。

$ svn switch --relocate https://svn.sourceforge.net/svnroot/vim/vim7 https://vim.svn.sourceforge.net/svnroot/vim/branches/vim7.1
記事の一覧 >