getPixelPosFromCursorPos のトラブルNo.11376
western さん 23/05/20 15:08
 
再現方法

1. 新規作成した直後にマクロ実行
   js { hidemaru.getPixelPosFromCursorPos("xy", 1, 1); }

秀丸エディタのプロセスで保護違反エラーが発生する
[EOF]状態 (内部許容のy) と第3引数の行番号の大小が影響していると推測される

新規作成状態で改行が無い状態でレンダリング窓を ("xy", 0, 2) の位置を起点
に表示したいが、これの計算でも同じ保護違反エラーは発生する

"xy" 指定の場合は文字単位やタブ文字幅や折り返しの計算が絡まないので単純に計
算で返ってもよいのではと思います
スクロールで見えない上側や左側の座標をマイナスで返してくれるのも重宝してます

将来の機能要望としてレンダリング枠の表示位置を指定する x,y に追随して欲しい
まわりの兼ね合いも併せて調整お願いします




あと hidemaru.getPixelPosFromCursorPos のマクロヘルプですが

```
[0]はX軸のピクセル数です。
[1]はY軸のピクセル数です。
```

返り値の値の説明が逆になっています (yPixel, xPixel と返る)
※自分は引数側の順番も含め動作の方の修正対応でも問題ないです
(hidemaruversion "9.22.99"; を入れる予定なので)

[ ]
RE:11376 getPixelPosFromCursorPos のトNo.11377
こみやんま さん 23/05/20 16:40
 
>あと hidemaru.getPixelPosFromCursorPos のマクロヘルプですが
>
>```
>[0]はX軸のピクセル数です。
>[1]はY軸のピクセル数です。


hidemaru.getCursorPosFromMousePos が
function getCursorPosFromMousePos(literal_unit? string, pos_x?: number, pos_
y?: number): [lineno: number, column: number]

というように、マウスのポジションが「x, y」の順、
秀丸エディタ上のカーソルポジションは基本、「lineno系,column系」的な順序

なので、

これを踏まえると、この逆にも近いような
hidemaru.getPixelPosFromCursorPos は、

hidemaru.getPixelPosFromCursorPos(literal_unit? string, pos_lineno?: number,
 pos_column?: number): [pos_x:number, pos_y:number]

的な順序が本来は妥当なのでは? という気もしますねぇ。
他の類型のhidemaru.***のPos系の関数も、
「秀丸エディタペイン上のカーソル位置」的なものは「行、桁」の順、
Screen空間のピクセル座標は「x, y」の順だったで、一貫させた方がよいのでは、と
いうところではあります。

順番をちゃんと一貫させてあわせておくと、理解しやすいし、
ECMAScriptのスプレッド構文「...」なども効かしやすいという利点はありますね。

[ ]
RE:11377 getPixelPosFromCursorPos のトNo.11384
秀丸担当 さん 23/05/22 10:13
 
バグ情報ありがとうございます。
getPixelPosFromCursorPosでEOFを超えるような場合たしかにだめでした。
修正させていただきます。
ちなみに固定ピッチフォントの場合は、マス目状になるので文字幅×高さのようなこ
とになりますが、プロポーショナルフォントの場合はマス目状ではないので、必ずし
もに文字幅×高さになるとは限らないことになります。

返り値のヘルプは逆でした。
仕様は変えずに、ヘルプのほうを変えておきます。

[ ]