2020-03-14 (Sa)
_ テキスト描画
何が表示されているかわからない場所へ、テキストを描画する。 もちろん、目立つように。背景は白っぽいかもしれないし、 黒っぽいかも知れない。ごちゃごちゃ何かいろいろ書いてある かもしれない。
これがなかなか難しい。
- テキストは Bold 体。
- テキストの周りに白いアウトラインを太めに。
- その右下に少し影を付ける。
アウトラインは、テキストを、本来の位置から少しずらして、 ずらす角度を 0〜360° 変化させながら、16回描画。
テキスト+アウトラインを一枚の絵として、色は全体を黒として、 alpha だけ持たせる。alpha は元々の値の 5% とする。 それを、アウトラインと同じ要領で16回描画。ただし、全体的に 右下にずらしておく。これがテキスト+アウトラインの影。
で、テキストは、その場で入力するので、テキストカーソルが必要になる。 カーソルが一色のみだと、周囲の色に溶け込んでしまって、見づらいかもしれない。 なので、カーソルにも影を付けることにした。
基本は、カーソルは黒一色。ただし、それを白に変えて 5% の alpha で 同じ要領で16回描画して、カーソルの影とする。
一応これで、背景がどんな色でもカーソルが見えるようになる。
ただし、このカーソルの描画時、実はテキストを alpha 0% で完全透明にして、 カーソルのある位置だけ背景を黒で完全不透明にしてるので、ここでもやっぱり テキストを描画している。
さて、結局テキストは何回描画してるんだろう?
cairo surface を pattern として何回描画してるんだろう? ![]()
いちおう、長〜〜いテキストを描画してみた。重いのは重いけど、 そんなに馬鹿重くはないな。
最近の PC はすごいね。こんな無茶な処理しても、結構平気でこなしてしまう。
ところで。
PangoAttribute の background alpha や foreground alpha の仕様に憮然。
普通は 0 で完全透明、MAX で完全不透明だと思うんだけど…
引数仕様としては 1〜65536 ということになってる。 使った感じ、おそらく 0 が完全不透明。というか alpha の処理をしない指定なんだと思う。 そして、65536 なんて渡せない。uint16_t だから。最大でも 65535。
たぶん、0 が完全不透明、1 が完全透明、65535 が完全不透明一歩手前、なんだろうと思う。
更には、background color / foreground color の方は、普通に 0〜65535 だった。
なんてややこしい…
2021-03-14 (Su)
_ 電源落ちた
Windows でゲームしてる間に、PC の電源が落ちた。
そういえば若干におう…?
そういえばファンが静かだったような… そのせい?
昨日 BIOS を更新はしたけど、 そのせいで Windows でファンに異常が出るとか、考えにくいなぁ...
電源切ってしばらく放置の後、電源入れてもう一度ゲームをプレイ。 今度は問題なさそう。何だったんだろうなぁ...
_ ルータ
https://www.fsi.co.jp/mobile/plusF/lp_fs/index.html
外出中に家の PC 等が勝手に通信することがないなら、こんなんでもいいよね。
うちはどうだろう… NTP くらいは通信するかもしれないけど、まぁそのくらいは通信できなくてもいいか。家にいる間にしてくれればいいし。
外出中は遅いの勝手に使って、家にいる間は +F 使うように、家の PC を 設定できるかなぁ。。
2022-03-14 (Mo)
_ Amazon に出店している(た?)お店に突撃
うちのテレビ。処分したい。
どうも、エディオンで買ったのだと思ってたけど、そっちには履歴がなくて、 Amazon の履歴を見てたらそっちの購入履歴にあった。Amazon marketplace だった。 過去のメールを確認したところ、確かに購入履歴があった。注文番号も判った。
出店元が、独自でもショッピングサイトを作ってたので、そこの問い合わせ form で、 テレビ引き取ってもらえないか、お願いしてみた。
というか、勢いに任せて第一歩を踏み出してしまったなw
2023-03-14 (Tu)
_ 原神 - 「振晶の照合実験」イベント
なんなんだろな、このイベント。 ルールが全然わからん。 いつもと違うチームで戦わされるのってなんでかな。
綾華の聖遺物。 会心ダメージの聖遺物でもっといいのができた。 あと、全体的にsub-opに会心率があるやつも手に入ったので、 強化してみた。
んーこれでどうだろう… 元チャがちょっと下がったのが残念…
_ マスク外して歩き回る
いつもの通院のため、外出。マスクせずに。
ぐるっと歩いて、マスクしてない人を 10人くらい見かけた。
まだまだ少ないけど、ようやく正常化に向かい始めた感じがする。 ある程度まで行けば、そこから先は一気に進むと思うのだが…
2024-03-14 (Th)
_ 別ゲー
今週に入ったくらいから、別のゲームをやってる。ノベルタイプのゲーム。 詳細は省略。
原神やる。時間をいくらか残してやめる。残り時間は別ゲーやる。いつの間にか寝てる。
もちろん、寝ていい状況でプレイしてるので、まぁいいんだけど。
なかなか進まない… 薬飲んでるので、時間をたっぷり残しても、たぶん途中で寝てしまって、結局あんまり進まないんだよね。
_ 原神 - 魔法少女ステッキをゲット
経営シミュレーションイベントが始まった。 やってみたけど、なんだかよくわからん。 でもまぁ、配布武器 (通称、魔法少女ステッキ) がゲットできたからまぁいいのか。 ついでに Lv90 まで上げておいた。今は使わんけど、そのうち使うこともあるかも。
2026-03-14 (Sa)
_ AutoHotKey v2 + AutoHotInterception で ctrl と capslock を入れ替えた
AutoHotKey v2 をインストールする。
https://github.com/oblitum/Interception/releases から interception driver をダウンロードする。
↑の zip を展開して、端末で install-interception /install する。これでドライバがインストールされる。
OS を再起動する。
https://github.com/evilC/AutoHotInterception/releases から最新の AutoHotInterception をダウンロードする。
↑の zip から AHK v2 を展開する。
↑の zip から Common/lib/AutoHotInterception.dll を取り出して、↑の AHK v2 の lib の中に入れる。
interception driver の zip の中の library に x86 やら x64 やらあるので、 これらを AHK v2 の lib の中の該当ディレクトリにコピーする。
AHK v2 の中は、だいたい↓こんな形になる。
- Monitor.ahk
- ...
- Lib
- AutoHotInterception.ahk
- AutoHotInterception.dll
- CLR.ahk
- Unblocker.ps1
- ...
- x86
- interception.dll
- x64
- interception.dll
Unblocker.ps1 を管理者権限で実行する、とあるんだけど、 よくわからなかったので、代わりに、 各 dll のプロパティを開いて「ダウンロードしたファイルだから云々」の 許可にチェックを入れた。
Monitor.ahk をダブルクリックすると、 キーボードやマウスの一覧が表示される。 ここで、全キーボードにチェックを入れて、 ノート PC 本体のキーを適当に叩いて、ID を表示させる。 その ID の Handle をコピーする。 (ID は OS 再起動すると変わってしまうので Handle で扱う…)
AHK v2 ディレクトリの中に以下のファイルを置く。 ctrlcaps.ahk というファイル名にした。
#Requires AutoHotkey v2.0
#include Lib\AutoHotInterception.ahk ; ライブラリを読み込む
Persistent
AHI := AutoHotInterception()
; 内蔵キーボードの Handle を指定(Monitor.exe で調べたもの)
targetHandlePart := "HID\VID_048D&PID_C103&REV_0500&Col02"
laptopId := AHI.GetKeyboardIdFromHandle(targetHandlePart)
if (laptopId == 0) {
MsgBox "内蔵キーボードが見つかりませんでした。ハンドル名を確認してください。"
ExitApp
}
; MsgBox "laptopId " laptopId
iflock(state) {
if (state) {
Send("{Blind}{Ctrl down}")
} else {
Send("{Blind}{Ctrl up}")
}
}
ifctrl(state) {
if (state) {
Send("{Blind}{CapsLock down}")
} else {
Send("{Blind}{CapsLock up}")
}
}
AHI.SubscribeKey(laptopId, GetKeySC("CapsLock"), true, iflock)
AHI.SubscribeKey(laptopId, GetKeySC("Ctrl"), true, ifctrl)
; MsgBox "AutoHotkey " A_AhkVersion " が起動しました。"
↓この部分の文字列を、コピーした Handle で置き換える。
targetHandlePart := "HID\VID_048D&PID_C103&REV_0500&Col02"
ctrlcaps.ahk をダブルクリックする。 と、本体キーのみ、ctrl と capslock が入れ替わってる。はず。
Win+R して shell:startup と入力してスタートアップを開く。 ここに、ctrlcaps.ahk へのショートカットを置いておく。
いろいろ苦労したけど、だいたい手順はこんな感じだと思う。
gemini 提案のコードは、lambda を使ってたけど、なんでか lambda が使えなかったので、 関数の形にしておいた。原因不明。
#Requires AutoHotkey v2.0
が通ってるんだから、v2.0 が使われているとは思う。
ドライバをインストールする時には UAC の確認があったけど、 ctrlcaps.ahk を実行する時には確認不要なのね。
コンパイルはしてない。そのうちするかもしれんが。
OS 起動から ahk 起動まで時間がかかるので、 その間は効かない。当たり前。
キーボードごとにいじるのは、 kmonad ではできなかったけど、auto hot interception だとできた。 たぶん、interception driver を使ってる、ってところが肝で、 普通の Win API だと取れない情報が、interception driver を使うと取れる、 ってことなんだろうなぁ。
