時計Widget覚書:timerイベント

Yahoo! Widget Engine(旧Konfabulator)用の時計Widgetを作る時の覚書。

以前は時計の更新時間を設定する際「onTimer」を使って記述していましたが、この方法だとintervalの値が1つしか与えられないので、部分的にinterval値を変更したり、ユーザーが自由にinterval値を変更できる仕様にするのは困難でした。

<action trigger=”onTimer” interval=”1″>
    updateTime();
</action>

Konfabulator v2.0から「timer」イベントが追加されたので、部分的にinterval値を変更したり、可変式にすることができるようになりました。

<timer name=”hogehoge” ticking=”true” interval=”2″>
    <onTimerFired>
        updateTime();
    </onTimerFired>
</timer>

或いは、

<timer>
    <name>hogehoge</name>
    <ticking>true</ticking>
    <interval>2</interval>
        <onTimerFired>
            updateTime();
        </onTimerFired>
</timer>

「name」を2種類用意すれば個々に違うinterval値が得られます。また、このtimerイベントを宣言しておけば、スクリプト中に「hogehoge.interval = 5;」というふうに直接記述してもinterval値を変更できます。
で、なぜinterval値を変えなくてはならないかという事なんですが、実はinterval値「1」と「0.5」とではCPUにかかる負担が相当違います。巷では「5」くらいがベストと囁かれているようですが、時計の場合秒針を表示しないのであれば「5」でも構いませんが、秒針を表示するとなると少なくても「1」より大きい値にすることはできません。そのような事から目的に合わせた最小限のinterval値に設定することが必要になります。とは言うものの、あまりスクリプトが複雑になってしまうのもどうかとは思いますが...

なお、interval値「1」は1秒間隔という事ですから「0.5」にすれば0.5秒間隔という事になります。機械式時計のようにチチチチと細かく動かすためにはinterval値を小さくすれば良いわけですが、Yahoo! Widget Engineでは最小回転角度が1度になっているようなので、その角度に合った値以下はどんなに小さくしても結果は同じになります。すなわち通常の時計の秒針は1秒で6度回転しますから1度ずつ動かしたいなら「0.166」にすればOKです。しかしながら、この値だとCPUの負担が...

<timer 属性>

    name:オブジェクト名(ASCII文字列)

    ticking:スクリプトファイル(真偽値/true, false)

    interval:イベントの間隔(秒単位/正実数)