行の高さと半角文字の幅のピクセル値No.11288
western さん 23/04/30 19:16
 
先に要望として出している内容に重なり恐縮なのですが

特定の文字の位置の xpixel2/ypixel2 な座標が得られる関数か
行の高さピクセル と 半角文字の幅ピクセル を取得できる
マクロ命令を改めて希望します


画面上の複数の場所で xpixel2, ypixel2 を取得し
それぞれの x, y の差を計算して
行の高さピクセル と 半角文字の幅ピクセル
を取得できるようになりました


先にアドバイス頂いた disabledraw2 を使うことで
大半のシチュエーションでは自然に取得できてはいるのですが


disabledraw2; からの enabledraw y, x; の処理が
ヘルプの言い回しから y のみ有効という処理のせいか

screenleftx を変化させずに x の違う xpixel2 を複数取れない状況で
screenleftx を変化させてしまうことで、
enabledraw; 時に disabledraw2; 開始前の横スクロール位置の再現ができない状況
となりました

disabledraw; からの enabledraw y, x; であれば、第2引数も有効なので

disabledraw2; ⇒ enabledraw;   ⇒ disabledraw; ⇒ enabledraw y, x;
disabledraw2; ⇒ enabledraw y; ⇒ disabledraw; ⇒ enabledraw y, x;
disabledraw2;                  ⇒ disabledraw; ⇒ enabledraw y, x;

のように試してみましたが redraw; をしなくても disabledraw; のタイミング?
で再描画が発生してしまいガクガクっと連続します。
※ガクガクっとした後で、カーソル位置とスクロール状態の復帰は想定通りの場所に
なる


幅と高さが取得できる命令あるならそれで終わる処理ですが
フォントサイズ変化や関連設定変更で変わる値なので
座標設定時に毎回150行超える上記のロジックで再計算必要になっています
(jsmode では計算に使う同期命令が複数必要なのと、
 呼び出しコストの都合で従来マクロに行ったり来たりです)



・x, y / lineno, column_wcs を指定した xpixel2 / ypixel2 が取得できる関数
・行の高さピクセル と 半角の幅ピクセル が取得できるキーワード
・jsmode でもコスト低くエディタの設定の値から上記の値が厳密に取得できる計算式
・disabledraw2; からの enabledraw y, x; で第2引数の screenleftx を指定
・disabledraw2; ⇒ enabledraw; ⇒ disabledraw; ⇒ enabledraw y, x; で画面が
乱れないフロー

いずれかの実現をよろしくお願いします

[ ]
RE:11288 行の高さと半角文字の幅のピクセNo.11290
秀丸担当 さん 23/05/01 16:50
 
disabledraw2からのenabledrawでxは有効だと思うのですが、うまくいかないケース
はちょっとわかりませんでした。
目的としてはカーソルでない場所でも位置を指定してピクセル位置を得るということ
だと思います。
そういう取得方法があったらいいです。
なんだかんだといろいろ対応していますが、レンダリング枠を大量に配置することを
目標にすると終わらない気がするので、ほどほどにしておきたいです。
ピクセル位置からカーソル位置を得るhidemaru.getCursorPosFromMousePos()がある
のですが、これと逆のhidemaru.getPixelPosFromCursorPos()のようなものが無いです。
レンダリング枠大量配置の目標というより、対にしてセットで扱えるようにするため
の関数があったらいいかもしれないです。
そういうのも考えてみようと思います。

[ ]
RE:11290 行の高さと半角文字の幅のピクセNo.11291
western さん 23/05/01 20:52
 
disabledraw2; enabledraw y, x; redraw;
で x の位置まで左端をスクロールしてくれない動画
https://youtu.be/UQUBl02u-JI

disabledraw,enabledraw文のヘルプを読むと

> disabledraw2に対するenabledrawでも、y位置の指定が有効です。(V9.19以降)

y 位置だけが有効であり、第2引数たる x 位置は有効ではない
ように読め、実際にその通りの動作となっています



行の高さと半角の幅ピクセルを取得して計算したい値
https://i.imgur.com/nFg3Ovv.png

秀丸標準の補完表示のキャプチャですが
これと同じ小窓の位置でレンダリング枠を表示したいのです

[ ]
RE:11291 行の高さと半角文字の幅のピクセNo.11292
秀丸担当 さん 23/05/02 08:55
 
disabledraw2からのenabledrawはその通りでした。
すみません。
disabledrawだったか、たまたま同じになっていたのか、勘違いしていたようです。
できるようにしようと思います。

[ ]
RE:11292 行の高さと半角文字の幅のピクセNo.11305
western さん 23/05/08 13:37
 
disabledraw2 からの enabledraw y, x; について
β対応ありがとございます。


ただ実際に使ってみたところ、先に #11288 で言及していた

> disabledraw2; ⇒ enabledraw;   ⇒ disabledraw; ⇒ enabledraw y, x;
> disabledraw2; ⇒ enabledraw y; ⇒ disabledraw; ⇒ enabledraw y, x;
> disabledraw2;                  ⇒ disabledraw; ⇒ enabledraw y, x;
>
> のように試してみましたが redraw; をしなくても disabledraw; のタイミング?
> で再描画が発生してしまいガクガクっと連続します。

のような挙動が disabledraw2; enabledraw y, x; だけでも発生するため、
敢えて第2引数を封印していたのではないかと察しました



hidemaru.getPixelPosFromCursorPos を追加して頂けた事で
#11288 で要望として提案した以下の項目も不要(解決済み)となっています

・行の高さピクセル と 半角の幅ピクセル が取得できるキーワード
・jsmode でもコスト低くエディタの設定の値から上記の値が厳密に取得できる計算式
・disabledraw2; からの enabledraw y, x; で第2引数の screenleftx を指定
・disabledraw2; ⇒ enabledraw; ⇒ disabledraw; ⇒ enabledraw y, x; で画面が
乱れないフロー


ので、画面崩れが未解決であれば 第2引数 をオミットして頂いても(私は)問題あり
ません




あと hidemaru.getPixelPosFromCursorPos について jsmode 内の対応となっていま
すが、
従来マクロでも使えるよう対応いただければ幸いです

ありがとうございまいた

[ ]
RE:11305 行の高さと半角文字の幅のピクセNo.11311
秀丸担当 さん 23/05/09 16:53
 
ご確認ありがとうございます。
disabledraw2 からの enabledraw y, x; は、なんとなく最初は封印を想定していた
のだったのかもという気もしてきましたが、横スクロールでずれることは確かなので、
パラメータとしては残しておこうと思います。

任意の場所のピクセル位置は、従来マクロでやるとしたら、js{}内でgetPixelPosFro
mCursorPosを取得して受け渡しするしかないです。
また追加するかもしれないですが、いったん落ち着かせたいところです。

[ ]
RE:11311 行の高さと半角文字の幅のピクセNo.11313
western さん 23/05/09 20:33
 
jsmode 遷移と取得と受け渡しにかかる最低命令数のコストを確認したところ
1回の測定を処理するのにマクロ同期(排他)状態で 25ms (4.0GHz) ほど
費やすようで、カーソル移動(入力)に合わせて毎回計算させるのは悩ましいですが、

フォントサイズ(幅高さ)は、そうそう変えないだろうという前提で
コスト避けるキャッシュと条件判定やしながら使いたいと思います

ともかく getPixelPosFromCursorPos の追加には感謝しきりです
お手数おかけしました。ありがとうございました

[ ]