なかなか仕事が手につかず、とりあえず周りの整理整頓をしていると、これが徹底的にやらないと気が済まなくなり、夜な夜な大掃除を始めてしまう始末。やらなければならない!という意識が強いほどマインドセットに逆らってしまう。条件反射的に。天の邪鬼な性癖がそうさせるのか...
デスクトップ環境をいじるのにも、これに似た心理が働く。カスタマイズ衝動が、かっぱえびせん状態へ誘うのだ。忙しい時にかぎって。そして、 雨計量器に嵌ってもうた...
1. Rainmeter(Stable Ver 4.1)... こいつの柔軟性にイチコロ!
Windows 系のデスクトップツールで遊ぶなら、こいつは最強かもしれない。なにしろ、ある種の言語システムもどきを具えているのだから。Documentation サイトも非常に参考になる。
スキン求めて、deviantArt あたりを散歩すると... スキン集というより、コードの宝庫!あまりの量に目移りし、どれをベースに改造しようか、惚れっぽい酔いどれは、はしごしまくり。柔軟性が高いということは自由度が高いことを意味し、自分でいじり倒すことができなければ、逆に不自由の呪縛にかかる。自由への道は険しい。ド M を覚醒させるにはうってつけの性向か...
中には完成度の低い作品もあり、自分の環境に合わせてカスタマイズを強いられる。やがて採用したスキンすべてに対して、なにかしらいじらないと落ち着かなくなる。自由というより、これはもう依存症だ!
2. マルチモニタ環境で... 病みつき!
スキン毎に「ドラック許可」や「クリックスルー」などの設定を組み合わせて、擬似的にドラッグ禁止領域を作ることができる。透明色で前面に配置しておけば、普段触りたくないリソースモニタ用アプリの保護領域を作ったり。
ちなみに、狼の黄色い目と青い目のあたりが、その領域...
とはいえ、あまり凝って、デスクトップツールに CPU を持っていかれれば本末転倒。リソースモニタ以外のアニメーションは、四つの地球儀と時計だけにし、CPU 使用率を 3% 未満に調整する。尚、CPU は、Intel Core i7-7700 3.6GHz...
右上画面には、三つの地球儀を重ね、大きくなるにつれて周期を遅くし、左下画面には、"Van Schagen Globe" という大航海時代風の地球儀スキンに "Steam Clock" という時計スキンの歯車を接地させて、ポンプで地球儀を回転させているように見せている。ちなみに、時計といえば、おいらは、SKAGEN を愛用している。Schagen と SKAGEN では綴りが違うけど日本語の発音は同じ。思わず夜の社交場でお馴染みの口癖を漏らす... 奇遇だねぇ!
尚、カレンダー、イベント、ToDo リストでは、姉妹ソフトの Rainlendar を採用している。Rainmeter に比べて柔軟性は劣るが、これらの要素では手軽さを優先したい。
Rainmeter の気がかりは、オーディオ制御系がちと不安定なところであろうか。ソースのスイッチングなど。使えないほどではないが、うちの環境といまいちマッチしない模様。お気に入りのイコライザや VU メータもあって惜しいのだけど。
てなわけで、WMP + XTHREE + FRUITY + DefaultAudioChanger を採用(画面右上)。実は、FRUITY にも嵌ってたりして...
3. 記述フォーマットに... なんとなくノスタルジア!
スキンファイルの拡張子は .ini で、基本フォーマットはこれ...
[Section]
Key=Value
Section には、こんなものがある。
[Rainmeter] : 全体のオプション定義 [Variables] : 変数定義 Measures : CPU やメモリなどの計測オブジェクト(Measure=Option で指定) Meters : 視覚的なオブジェクト(Meter=Option で指定) MeterStyles : Meters のオプション定義。 [Metadata] : 動作に無関係な情報を記述
オブジェクト名はなんでもいいようだが、とりあえず、このあたりの動作を抑えておきたい。
Measure=Calc : 演算制御オブジェクトに指定 Meter=Shape : 形状制御オブジェクトに指定 Meter=Image : 画像制御オブジェクトに指定 Meter=Rotator : 回転制御オブジェクトに指定 Meter=Roundline : 円運動制御オブジェクトに指定 Meter=Button : マウス操作オブジェクトに指定
Shape オブジェクトには基本的な属性が揃っている。
Rectangle(長方形), Ellipse(楕円), Line(線), Arc(円弧), Curve(曲線), Path(パス)、あるいは、 図形の結合やグラデーションなど。
Image オブジェクトでは、画像データの位置やサイズの変更が自由にでき、色を混在させることもできる。
そして、軽く試すと、こんな感じ...
;; 横方向にグラデーション [Object1] Meter=image BackgroundMode=2 SolidColor=0,0,0,255 SolidColor2=0,0,0,0 X=0 Y=0 W=100 H=200 ;; 縦方向にグラデーション [Object3] Meter=Shape Shape=Rectangle 0,0,200,100 | Fill LinearGradient MyFillGradient | Stroke Color 0,0,0,0 MyFillGradient=90 | 0,0,0,0 ; 0.0 | 0,0,0,255 ; 1.0 ; MyFillGradient で角度を指定する。0度や180度にすれば横方向。 X=0 Y=250 ;; 枠付き長方形 [Object2] Meter=Shape Shape=Rectangle 0,0,200,100 | Fill Color 0,0,0 | StrokeWidth 4 | Stroke Color 0,0,255 X=0 Y=400
4. おまけ... 目玉!
新人時代に実習で書いたマウスカーソル追尾プログラム(C コード)を移植してみた。
目玉を二つにしたければ、インスタンスを二つにするだけ。具体的には、別々のフォルダにそれぞれ同じ ini ファイルを置く。
ところで、マウスカーソルを含めた画面キャプチャで、ちと悩んでしまった。
Windows 標準の「拡大鏡」なんてツールは一生使わない!と思っていたけど、こいつでわりと簡単! 拡大鏡ウィンドウをアクティブにした状態でマウスを移動させて、Alt + PSc で一発。へぇ~...
尚、ビューモードは固定。
さて、基本的な演算子はだいたい揃っているので、計測で困ることはあまりなさそう。
マウスの座標を取得するには、"MouseXY" という Plugin を見つけたので、どこぞからもってきた。
また、ビルトイン変数を知っているとなかなか便利。リソースのパスを暗黙に取得したり、モニタ変数を動的に取得したり。動的オブジェクトに対しては、現在の位置とサイズを取得するビルトイン変数が用意されている。
#CURRENTCONFIGX#
#CURRENTCONFIGY#
#CURRENTCONFIGWIDTH#
#CURRENTCONFIGHEIGHT#
尚、動的変数は、Measure と Meter だけに許されていて、おまじないを一つ書いておけばいい。
DynamicVariables=1
あれ?
Roundline オブジェクトの "StartAngle" というオプションが、0度を指定すると3時の方向?なので、頂点から開始するなら 270度を指定するってこと?目玉なんて、どこから始まってもええんだけど、とりあえず Documentation サイトの事例に従って...
StartAngle=(Rad(270))
RotationAngle は、360度フルに欲しいから...
RotationAngle=(Rad(360))
そして、コードはこんな感じ...
[Metadata] eye follow the cursor... Junk Edition. [Rainmeter] Update=20 [Variables] EyeColor=127,255,212 IrisColor=47,79,79 PupilColor=0,139,139 OutlineColor=47,79,79 EyeSize=180 IrisSize=80 PupilSize=30 OutlineSize=2 AdjustMaxLen=0.005 AdjustEyeDis=0.002 ; "AdjustMaxLen" は、[MaxLength]オブジェクトに対する瞳孔の移動係数。 ; "AdjustEyeDis" は、[EyeDistance]オブジェクトに対する瞳孔の移動係数。 ; 目のサイズを変更すると、これらを微調整しないと瞳孔が眼球からはみ出すかも... [PosX] Measure=Plugin Plugin=MouseXY Dimension=X [PosY] Measure=Plugin Plugin=MouseXY Dimension=Y [EyeArea] Meter=Roundline W=#EyeSize# H=#EyeSize# StartAngle=(Rad(270)) RotationAngle=(Rad(360)) LineLength=(0.5*#EyeSize#) LineColor=#EyeColor# Solid=1 AntiAlias=1 [EyeOutline] Meter=Roundline W=#EyeSize# H=#EyeSize# StartAngle=(Rad(270)) RotationAngle=(Rad(360)) LineLength=(0.5*#EyeSize#-#OutlineSize#) LineStart=(0.5*#EyeSize#) LineColor=#OutlineColor# Solid=1 AntiAlias=1 [EyeAngle] Measure=Calc DynamicVariables=1 Formula=(Atan2(([PosY]-0.5*#EyeSize#-#CURRENTCONFIGY#),([PosX]-0.5*#EyeSize#-#CURRENTCONFIGX#))) [EyeDistance] Measure=Calc DynamicVariables=1 Formula=(Sqrt(Abs(([PosX]-0.5*#EyeSize#-#CURRENTCONFIGX#)**2+([PosY]-0.5*#EyeSize#-#CURRENTCONFIGY#)**2))) [MaxLength] Measure=Calc DynamicVariables=1 Formula=(0.5*(#EyeSize#-#IrisSize#)-#OutlineSize#+1) [Iris] Meter=Roundline DynamicVariables=1 W=#IrisSize# H=#IrisSize# StartAngle=(Rad(270)) RotationAngle=(Rad(360)) LineLength=(0.5*#IrisSize#) LineColor=#IrisColor# Solid=1 X=(([EyeDistance] > [MaxLength] ? ([MaxLength]*Cos([EyeAngle])) : ([EyeDistance]*Cos([EyeAngle])))+0.5*(#EyeSize#-#IrisSize#)) Y=(([EyeDistance] > [MaxLength] ? ([MaxLength]*Sin([EyeAngle])) : ([EyeDistance]*Sin([EyeAngle])))+0.5*(#EyeSize#-#IrisSize#)) [Pupil] Meter=Roundline DynamicVariables=1 W=#PupilSize# H=#PupilSize# StartAngle=(Rad(270)) RotationAngle=(Rad(360)) LineLength=(0.5*#PupilSize#) LineColor=#PupilColor# Solid=1 X=([Iris:X]+0.5*(#IrisSize#-#PupilSize#)+([EyeDistance] > (2*[MaxLength]) ? (#AdjustMaxLen#*[MaxLength]) : (#AdjustEyeDis#*[EyeDistance]))*#IrisSize#*Cos([EyeAngle])) Y=([Iris:Y]+0.5*(#IrisSize#-#PupilSize#)+([EyeDistance] > (2*[MaxLength]) ? (#AdjustMaxLen#*[MaxLength]) : (#AdjustEyeDis#*[EyeDistance]))*#IrisSize#*Sin([EyeAngle]))
0 コメント:
コメントを投稿