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

スポンサーサイト

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

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

[OpenTween] サムネイル画像を拡大して表示したい (OpenTween Advent Calendar 2014 7日目)

2014.12.07 | OpenTween

0 Comments

この記事は OpenTween Advent Calendar 2014 の 7日目の記事として書かせていただいてます。

OpenTween との関わりは GitHub での push 権限をいただいて以降は、主に細かな挙動やバグの修正、最近では複数枚画像の投稿用 UI 周りを弄ったりといったことをしてます。記事の内容は改造版についてでもいいようなので、ここでは個人的な使い勝手を優先して改造しているものについて。(※ソースコードは GitHub にありますが、リリースなどはしていません)

OpenTween におけるサムネイル画像の取得方法については 2日目の kim_upsilon さんの記事に詳しく書かれていますので、ここではその取得した画像の表示方法と、改造版で追加した表示方法について軽く触れたいと思います。……OpenTween てなんぞや?って方は同じく 1日目の記事に詳しく書かれてますのでそちらをどうぞ。

 

>サムネイル画像の表示

発言一覧からツイートを選択すると、発言詳細部にそのツイートの内容が表示されます。もし画像が含まれていれば、サムネイル表示に適した画像の取得処理を経て、発言詳細部の右側にひょこっと表示枠が現れます。下のような感じ。(サムネイル枠の背景色は本来ならコントロールの色ですが、めんどくさかったので改造版のものを流用したので黒くなってます)

TTW1

あんこ。

画像が複数枚存在すれば、サムネイル枠の右側にあるスクロールバーを操作することで画像を切り替えられます。表示以外の機能としては、サムネイル枠内をダブルクリックすればブラウザで大きな画像を開くことができ、右クリックメニューからは類似画像の検索ができます。キー割り当てについてはちょっとわからないので割愛。

このままの使用でも問題がないといえばないのですが、画像によっては縮小されすぎて、一瞥では何の画像なのかハッキリしないことも多々あります。で、画像を大きく表示されるようにサムネイル枠を広げてみるわけですが……

TTW1-2

まあ、そうなるな。

発言詳細部が壊滅的です。さすがにこの窮屈な状態で使い続けるのは酷だし、かといって毎度サムネイル枠を広げて戻して……とやるのも面倒です。一時的にでも拡大して表示したいなと思い、改造版では 2つほど機能を追加してみました。

 

>そのいち: マウスドラッグで一時的に拡大

一時的に拡大できれば事足りるので、表示されたサムネイル枠上でマウス押下→拡大したい方向へドラッグするという方法を採りました。コードはこちら。
https://github.com/spx268/OpenTween/commit/d59ed7a4db72748556174b283411bdd48d121f40

具体的なやり方としては、左ボタン押下のままマウスカーソルの移動が検出されたら TweetThumbnail (サムネイルを表示するコントロール)を別ウィンドウに分離して、移動距離に応じてウィンドウサイズを拡大します。ボタンから指を離したらウィンドウを閉じ、TweetThumbnail を本来の位置に戻します。

サムネイル枠上でマウス左ボタンを押し、そのままマウスを左上方向へ――

TTW2

ぐいぐいぐいーっと。

未読チェック中に気になった画像を一時的に拡大したかっただけなので、日常的な使用ではこの機能で事足りています。

……が、最近の楽しみである艦これのワンドロチェックにおいては、その投稿数から、この少々の手間すら煩わしく感じることが増えたため、別の方法を追加しました。

 

>ふたつめ: サムネイル枠を独立したウィンドウとして分離

手っ取り早く、かつ本体に影響を及ぼすこともない方法です。発言詳細部のサイズに縛られることがなく、表示位置も好きな位置にウィンドウを配置するだけです。ひとつめのやり方も中身は別ウィンドウでの表示を行っているだけなので、方法はそう変わりません。ウィンドウを閉じれば TweetThumbnail を元の位置に戻すのも一緒です。
https://github.com/spx268/OpenTween/commit/d22de2a2894cfe6f0900b6017cb335dc03f03443

右下の「初回起動時に開くアレ」に追加したメニューからサムネイル枠を分離し、ウィンドウ化するとこんな感じ。

TTW3

移動先のツイートにも画像があればウィンドウは表示したままを維持し、なければ隠れます。再度画像のあるツイートを選択すればまた表示されます(その際には本体からフォーカスを奪わないようにしたりと、結構面倒なことになりましたが……)。おかげで、ワンドロのチェックはかなり楽になりました。

ちなみにこのサムネイルウィンドウでも、そのいちの機能は併存しているため、一時的に拡大したければずいずいっとできます。

 

* * *

 

サムネイルの表示機能については以上です。

今回紹介したものも含めて、個人的には手を加えて便利に使っている機能でも、その実装方法や今後の拡張性・互換性、人それぞれの好ましく感じる使い方などを考慮すると、おいそれと本家にマージはし辛い改造内容が多いですが、ソースコードは GitHub に置いてありますので、もし興味があれば参考にしてみてください。

スポンサーサイト

[Rainmeter] Rainmeter 3.0

2013.10.31 | Rainmeter

6 Comments

Rainmeter 3.0 がリリースされました。詳細はリリースノート(英語)を見てください。
3.0 は内部的に大幅な変更があったため、バグフィックスを含む細々としたマイナーリリースが続いています。2013.10.31 時点では 3.0.2 が最新です。3.0 を使うのであれば、できるだけ最新版を使用してください。

2.5 から 3.0 になって大きく変わったのは、フォントレンダリングに Direct2D が使用されるようになった点です(要 Windows 7 プラットフォームアップデート以降)。これまでのGDI+ レンダリングではなく、デフォルトで D2D レンダリングが使われます。

font-render

上がこれまでの GDI+ レンダリング、下が D2D レンダリングです。人によって感じ方が違うので細かくは書きませんが、個人的には GDI+ のぼやけた感じからすると、D2D はクッキリしているなという印象です。若干ジャギーが目立ちますが。

D2D がデフォルトになったことで、環境によっては見え方が違ってしまうことがあり、内部の描画微調整を経て、改善はされてきていますが、まだまだ描画互換性は低いままとなっています。特に日本語フォントについてはまだまだ感があるようですので、出来る限り公式フォーラムに画像などと共に状況を投稿して頂ければと思います(私には調整できませんので)。

もし D2D レンダリングが気に入らない、描画が崩れる、といった状況であれば、設定でこれまでの GDI+ レンダリングに戻すことができます。メニューから管理ツールを開き、設定タブにある "D2D レンダリングを使用する" のチェックを外してください。スキン単位でも、スキンのメニューから設定を辿り、同名のメニュー項目で同様の切り替えができます。

あと、Direct2D は Vista 以降なら対応しているはずですが、Rainmeter では Windows 7 のプラットフォームアップデートを適用した環境、または Windows 8 以降が対応環境となっています。対応環境以外では、デフォルトで今までの GDI+ レンダリングで処理されます。

 

フォントレンダリング以外のアップデートとしては、WebParser プラグインが DynamicVariables に対応した点でしょうか。使い方がこれまでの DynamicVariables の作法と若干違っているので、詳細はマニュアル(英語)を見てください。

便利なアップデートとしては、Meter に Padding オプションが追加されたことと、Measure の一時停止関連 Bang の追加を挙げておきます。!PauseMeasure に関しては、!DisableMeasure と何が違うかというと、disable はそうなったときに値を返さない(0または空文字)のに対し、pause は最新の更新値を返すという違いがあります。毎回更新する必要はないし、必要になるまでは止めておきたいといった用途に使えます。

 

しばらくは D2D 関連のフィックスが続きそう……かな?

[Rainmeter] Rainmeter 2.5

2013.04.09 | Rainmeter

0 Comments

Rainmeter 2.5 がリリースされました。詳細はリリースノート(英語)を見てください。

公式で紹介されている変更点を箇条書きすると、

  • FileView プラグインが追加された。(マニュアル(英語)
  • String メーターに ClipString=2 が追加された。制御用のパラメータとして ClipStringW / ClipStringH が追加された。縦横どちらかのサイズを指定した際に、動的にメーターサイズを制御できる。
  • 新しいマウスアクションとして、ホイールスクロールを扱えるようになった。(MouseScrollDownAction / MouseScrollUpAction など)
  • マウスカーソルの位置を表す変数が追加された。($MouseX$ / $MouseY$ など) ※リアルタイムには取得できず、主に既存のマウスアクションで使うものなので、用途はかなり限られる。
  • スキン、メーター、メジャーに OnUpdateAction が追加された。その名の通り、更新間隔ごとに呼ばれる。 ※OnUpdateAction から !Update などを呼ぶと無限ループになるので呼ばないこと!
  • メジャーに OnChangeAction が追加された。メジャーの値が更新される際、前回値と異なる場合に呼ばれる。 ※上記同様、必ず値が異なるようなものでは !Update などを呼ぶと無限ループになるので呼ばないこと!
  • スキンに OnFocusAction / OnUnFocusAction が追加された。スキンウィンドウがフォーカスを得たり失ったりすると呼ばれる。
  • !UpdateMeasure / !UpdateMeter の引数として、"*" が使えるようになった。!Update では UpdateDivider を無視した更新ができないため、そうしたことがしたい時に、代わりに使うことができる。
  • WebParser プラグインの ProxyServer オプションの挙動が変更された。

 

注釈もつけましたが、気を付けないといけないのは OnUpdateAction / OnChangeAction の挙動です。更新時に呼ばれるものから更新を行うと無限ループになってしまうので、絶対に呼ばないでください。UpdateDivider を指定していれば、!Update を呼ぶ場合に限り、無限ループにはなりませんが、どこで何がどのように更新されるかはわかりにくく、結局無限ループになってしまうことにもなりかねませんので、使用は推奨しません。

WebParser プラグインの ProxyServer オプションについては、指定方法を2つ追加し、以下の3通りの指定が可能になりました。

  • /auto
    レジストリに登録されたプロキシ設定を使用する(実際には、IEで指定したプロキシを使用する) ※デフォルト設定
  • /none
    直接インターネットへ接続する
  • servername:port
    プロキシサーバを指定する

 

加えて、Rainmeter.ini と同じ場所にある Rainmeter.data (プラグイン用の設定ファイル。存在しない時は手動でテキストファイルを作成。拡張子に注意)に以下のように設定すると(例として /none に設定)、デフォルトの設定を置き換えることができます。

[WebParser.dll]
ProxyServer=/none

また、今までは WebParser を使ったメジャーごとにプロキシを使い分けるといったことができませんでしたが、それもできるようになりました。指定方法が増えたのは副産物であり、こっちがメインの変更点です。

変更点に挙げられていないもので、自分が修正したものとしては、InputText プラグインの修正があります。
IME によっては、日本語入力が行えなくなる不具合がありましたが、たぶん修正されたと思います。少なくとも、使っている MS-IME では問題なく入力できるようになったようです。

 

次のリリースバージョンは 3.0 になります。
描画周りにかなり大がかりな変更が加わりますので、これまで通り「ベータだけど安定版として使える」とは言えなくなりそうですが、Direct2D / DirectWrite での描画を試してみたい方は使ってみてください。現時点ではバグが残っていたり、未実装な箇所が多かったりするものの、文字列描画品質の改善具合は垣間見れると思います。(残念ながら、現時点ではGDI+を使った描画よりも処理が重いですが……次第に改善されるかもしれません)

[Rainmeter] Rainmeter 2.4

2012.11.09 | Rainmeter

0 Comments

Rainmeter 2.4 がリリースされました。詳細はリリースノート(英語)を見てください。

今回の大きな変更点としては、今までテーマ (Themes) として扱われてきたものが、レイアウト (Layouts) という名称へと変更されています。テーマという呼称が勘違いを生みやすかったためだと思いますが、変更された経緯はよくわかりません。あと、"Layouts" 表記に変更されているのも英語のみで、日本語や他言語はまだ "Themes" 訳のままになっています。公式リリースとしてはちょっとお粗末な気もしますが、そのうち反映されると思います。
(英語に関してはちょくちょく修正が入っていますが、それが今後修正される可能性がある仮置きなのか、最終Fixで他言語でも訳していいものなのか判断が付かないことが多々あります。翻訳可能になった時点で告知が欲しいところです)

新機能としては、"Section Variables" というものが追加されました。"Section" とは、スキン内で定義されているメジャーやメーターのことで、それらに関する情報を変数として、スキン内で使用できるようになりました。例えば [Meter1] というメーターがあったとして、これまでは [Meter1] の位置やサイズを知る方法はありませんでしたが、2.4 では [Meter1:X] や [Meter1:W] のように使うことで、メーターの位置やサイズを他のメジャーやメーターの設定値に用いることができます。

また、書式指定も可能です。これまでは書式指定をする際には Meter=String の書式指定を使っていました。

[Meter1]
Meter=String
MeasureName=Measure1
MeasureName2=Measure2
Text="Measure1: %1, Measure2: %2"
Scale=100
NumOfDecimals=2

上記の例だと、Scale=100 と NumOfDecimals=2 が Measure1 と Measure2 の両方に反映され、どちらも 100 で割った値を小数点第二位まで表示します。ですが、Measure2 のほうだけ 1000で割った値を小数点第三位まで表示したい、といった用途には使えませんでした。"Section Variables" を使えば、以下のように書き直せます。

[Meter1]
Meter=String
Text="Measure1: [Measure1:2,/100], Measure2: [Measure2:3,/1000]"
DynamicVariables=1

実態は "Dynamic Variables" ですので、DynamicVariables=1 を付けないと動作しません。今まで [Measure] で使えていたものが [Meter] にも拡張され、さらに書式指定できるようになったものが "Section Variables" ということです。つまり、[Measure] / [Measure:] / [Measure:2] などの表記ができるようになりましたが、それぞれ動作も違っています([Measure] は文字列表記があれば文字列が使われますが、[Measure:]は数値が使われます)。詳細はマニュアルを見てください。

もう一つの新機能としては、スキンを右クリックしたときに出るコンテキストメニューに、スキン独自のメニュー項目を追加できるようになりました。既存のスキンメニューの間に挿入されるだけで、スキンで定義した項目だけが表示されるようになるわけではないので、使い勝手がいいかどうかは微妙なところですが……。

 

あと、これは触れておかないといけない点としては、オンラインマニュアルが再整備されて、ダイアログやメニューなどのUIに関するマニュアルも追加されたところでしょう。英語ですけど、難しくは書かれてないので、なんとなくわかると思います。本来ならマニュアルも日本語化されてほしいところではありますが……公式としてはどの言語にも翻訳は行わない方針のようです。(各言語に翻訳された後、英語マニュアルに追加・修正・削除があっても、翻訳先が古いまま残り続けることが常のため。また、翻訳が正しいかどうか精査不能だったり、翻訳方針がぶつかったりと、いろいろ面倒……。Rainmeter の翻訳状況を見ててもそう思います)

[Rainmeter] Rainmeter 2.3

2012.06.28 | Rainmeter

6 Comments

Rainmeter 2.3 正式版(最終版と呼んだほうがいいのかな?)がリリースされました。具体的な変更点はリリースノート(英語)を見てください。挙動に関する変更点は前回の記事にて触れていますので、そちらも参考にどうぞ。

2.3 における重要な変更点として、ディレクトリ構成の変更があるので、それについて書いておきます。これは標準インストールの場合のみ影響を受けます。

1つ目。アドオンのディレクトリが "Program Files\Rainmeter\Addons\" から "%APPDATA%\Rainmeter\Addons\" になりました。
2つ目。標準添付でないプラグイン(主にスキン製作者が添付したプラグイン)のディレクトリが "Program Files\Rainmeter\Plugins\" から "%APPDATA%\Rainmeter\Plugins\" になりました。優先順位は "Program Files" 配下にあるプラグインほうが高いです。

この変更によって、.rmskin なスキンパッケージを SkinInstaller を使ってインストールする際に、アドオンや添付プラグインをUAC対象である "Program Files" 配下へとインストールする必要がなくなったため、管理者権限を必要としなくなりました。管理者権限絡みで問題のあった環境では有効な変更だと思います。上にも書いたように、これは標準インストールで使っている場合で、昔ながらのポータブルインストール状態で使っている場合は今まで通りのディレクトリ構成でそのまま使えます。

 

スキン制作に関する部分でも、ディレクトリ構成の変更がありました。新たに "@Resources" という特別なディレクトリが定義されました。場所は "#ROOTCONFIGPATH#@Resources\" になります(標準スキンの Illustro の場合だと、 Illustro\@Resources)。
このディレクトリはスキン探索の対象外になるので、画像ファイルやインクルードファイル、Luaスクリプトなどをまとめて入れておくと、スキン探索の処理が若干軽減できます。逆に言うと、ここにスキンファイル(.ini)を置いてしまうと Rainmeter が認識できないので、絶対に置かないでください。
@Resources ディレクトリへのパスは #@# という変数に入ってますので、パスを指定する際には #ROOTCONFIGPATH# を使わずに ImageName=#@#Images\Image.jpg のようにしたほうが短く書けます。

また、"@Resources\Fonts\" に置かれているフォントは自動で読み込まれるので、LocalFont=の指定なしに使えるようになります。

 

いろいろと仕様が変わっていってるんですけど、最近はどう変わっていってるのか、どう変えていくのかがあまり追えていないので(いきなり実装されたりするので)、若干不安になることもあるといえばありますが、使いやすく(わかりやすく)変更されていくのであればいいかなと思っています。

[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プラグインを入れて、「プラグインを入れたらクラッシュした!」という報告が増えないといいなあ……。

 

----------

 

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

[Rainmeter] Rainmeter 2.2

2012.01.22 | Rainmeter

0 Comments

Rainmeter 2.2がリリースされました。以下、いくつか箇条書き。

・UIがマルチランゲージ対応になりました。日本語も含まれています。訳をこうしたほうがいいとか、今後増える部分の翻訳など、手伝ってくださる方はフォーラムの日本語化スレッドまでどうぞ。

・「デスクトップを表示」したときに、今までは"Normal"のスキンは隠れていましたが、デフォルトの設定では隠れなくなりました。今まで通り隠したいなら、Rainmeter.iniの[Rainmeter]セクションにNormalStayDesktop=0を追加してください。(この設定方法は今後変わる可能性があるかもしれません)

・インストーラやRainmeter本体(exe/dll)にCertumのオープンソース用コードサイニング証明書がつきました。

・Litestepモジュールとして動作する機能が省かれました。

 

次の2.3では、プラグインでDynamicVariablesが使えるようになるかもしれません。ただ、対応するには新しいプラグイン用APIを使う必要があるため、既存のプラグインでは現状維持ということになります。自分のプラグインもその新しいAPIを使った方式に書き換えようかと思いましたが、それに合わせようとすると処理の構造上若干無理があったので、ちょっとめんどくさい……。

Next Page »

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