Search
Categories
Articles
Rainmeter関連
ファイル置き場
お知り合いなど

スポンサーサイト

--.--.-- | スポンサー広告

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Rainmeter] Rainmeter 2.3 におけるスキン動作の変更点

2012.04.23 | Rainmeter

4 Comments

※今後変更される可能性もあります

Rainmeter 2.3 では、かなり大胆なバグフィックスが盛り込まれることとなりました。ここで言うバグとは、Rainmeter がまだ 1.0 にもなっていない頃から存在する、いわば「仕様」化してしまったと捉えて差支えのないものを含んでいます。スキン製作者によっては、この「仕様」を逆手に取ってスキンを作成された方もいらっしゃると思います。そういったスキンはもしかしたら、2.3 上で動作させるためには多少の修正を必要とするかもしれません。(公式でその件についてあまり言及されていないのが気になりますが)

 

その 1)
Measure=Calc の Formula 内に Measure を含んでいるとき、これまでは Measure の定義順に関わらず、必ず更新前の値が使われていましたが、2.3 では Measure の定義順に応じて、参照する Measure が前に定義されていれば更新後の値が使われ、後に定義されていれば更新前の値が使われます。

[Measure1] 
Measure=Calc 
Formula=Measure1 + 1 
 
[Measure2] 
Measure=Calc 
Formula=Measure1

上記のコードの場合、 2.2 以前では Measure2 は Measure1 より 1 少ない数で推移するのに対し、2.3 以降では Measure1 と Measure2 が同じ値のまま推移します。もし 2.3 以降でも Measure2 を1少ない数で推移させたい場合は、Measure2 の定義位置を Measure1 の前にする必要があります。

この変更は「Calc の遅延を修正したい」ということで行われたものです。

 

その 2)
スキン初回読み込み時、または再読み込み時に、これまでは Measure は2回更新されていました。2.3 では 1回だけ更新されるように変更されました。
上のコードで考えるなら、2.2 以前ではスキンが表示されたときに Measure1=2 / Measure2=1 となりますが、2.3 以降では Measure1=1 / Measure2=1 となります。

この変更は「Script が1回だけ実行されるようにしたい」ということで行われたものです。2回実行されると困る場面が多いらしい?
反面、「2回実行されることを前提で組まれたスキン」は動作がおかしくなる可能性があります。Update= が大きいと影響がより顕著に出やすいです。

 

その 3)
その 2) の副作用ともいうべき、IfAction の実行タイミングが、値の更新前から更新後に変更されました。
2.2 以前では、1回目の更新前にまず IfEqualValue=0 の Action が実行され(初期値が 0 なので)、その後に値が更新されます。2回目の更新前に 0 以外の条件に設定された Action が実行されます。この挙動のため、条件を満たす値に更新されても次の更新までは Action が実行されないという仕様になっています。
2.3 以降では1回しか更新が行われないため、IfAction の実行タイミングが更新前のままだと IfEqualValue=0 の Action しか実行されないことになります。そのため、実行タイミングが値の更新後に移動することとなりました。振る舞いとしては好ましい変更ですが、その副作用として、初回に必ず実行されていた IfEqualValue=0 の Action は実行されなくなりました。

この「バグ仕様」はいろいろなスキンで使われていると思うので、影響はそれなりにあると思います(実際に公式フォーラムにも動作がおかしくなった報告があり、回避策として遅延実行用の Measure を定義しておく方法が紹介されていた)。その 2) の変更同様、個人的には「互換性」を考えるのであればあまり好ましい変更だとは思いませんが、開発チームとしての結論は「デメリットを上回るメリットがあるから(主に上に挙げた Script)」ということで、このままになりそうです。実際に困るような有用な実例を具体的に挙げることができなかったのもあるので(極端な例だったり、実用的でなかったり)、もしそういった実用例を知っていれば公式フォーラムにて挙げていただけると助かります。

 

その 4)
これは問題というわけではありませんが、2.3 からは新しいAPIに対応したプラグインで DynamicVariables が使えるようになります。プラグインによっては、例えば WebParser の Url=[Measure] のように書式が DynamicVariables と被っているものもあります。プラグインの実装次第ですが、新しいAPIに対応するためにオプションの書式が変わったり、新たな書式が追加されたりする可能性もあります(まだベータなのでAPI自体が変わる可能性もあります)。

また、新しいAPIに対応すると、Rainmeter の旧バージョンでは動作しなくなります(関数名が被っているので恐らくクラッシュする)。もしプラグイン製作者が 2.3 だけでなく 2.2 以前にも対応する必要があるのであれば、それぞれの対応プラグインを公開する必要があります。1つのプラグインで新旧両方には(たぶん)対応できません。

旧バージョンに新APIプラグインを入れて、「プラグインを入れたらクラッシュした!」という報告が増えないといいなあ……。

 

----------

 

現時点で把握しているのは以上ですが、今後もこういった「仕様化していたバグの修正」で非互換な部分が出てくる可能性は否定できません。どっちがいいかは個々人のメリット次第になってしまうのでなんとも扱いづらいですが……。

スポンサーサイト

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。