マウスカーソルの自動隠蔽
マウスの動きが一定時間なければマウスカーソルを非表示にし、動きがあれば表示する何かを作りました。
mouse.lua
-- mouse.lua do -- マウスの座標 local x = -1 local y = -1 -- 直前のマウスの座標 local lx = -1 local ly = -1 -- 現在の時刻 local now = 0 -- 最後に動いた時刻 local last = 0 -- 最後に動いた時刻からの経過時間 local past = 0 -- マウスカーソルを消去する限界のミリ秒 local limit = 5000 -- 初期状態で5秒とする。 -- 現在マウスカーソルが表示されているかどうか。 local flag = true -- ローカル関数 -- booleanを1か0に変換して返す。 local bool2num = function(bool) if bool then return 1 else return 0 end end -- 0をfalseに、それ以外をtrueにして返す。 local num2bool = function(num) if num==0 then return false else return true end end -- マウスカーソルを表示する。 local print_cursor = function() if not(flag) then -- 表示していない時に限り NSExec("_mousemode 1") flag = true end end -- マウスカーソルを非表示にする。 local erace_cursor = function() if flag then -- 表示している時に限り NSExec("_mousemode 0") flag = false end end -- mousemodeを上書きする。 NSExec("luasub mousemode") function NSCOM_mousemode() if num2bool(NSPopInt()) then print_cursor() else erace_cursor() end end -- マウスに動きがあった時の処理 local move_mouse = function() -- 即座にマウスカーソルを表示する。 print_cursor() -- また、最後に動いた時刻を更新する。 last = now -- 値を更新 lx = x ly = y end -- NSCALL_animationの中から、mouse_blink関数を呼び出すこと。 function mouse_blink() now = NSTimer() -- 現在の時刻を取得 past = now - last -- 最後に動いた時刻からの経過時間を取得 x, y = NSGetMouse() -- 現在のマウスの座標を取得 if x == lx and y == ly then -- 不動であれば -- 経過時刻を見る。 if past > limit then -- 限界を超えていれば、消去する。 erace_cursor() else -- そうでなければ表示する。 print_cursor() end else -- 動きが認められれば move_mouse() end return false -- 常にfalseを返す。 end -- getmouseposを上書きする。 NSExec("luasub getmousepos") function NSCOM_getmousepos() local rx = NSPopIntRef() NSPopComma() local ry = NSPopIntRef() mouse_blink() -- マウスの表示非表示処理をする。 NSSetIntValue(rx, x) NSSetIntValue(ry, y) end -- 追加命令 -- 現在、マウスの表示非表示を取得する。 function is_mouse_printed() return flag end -- それをNScripterの側から扱えるようにする。 NSExec("luasub getmousemode") function NSCOM_getmousemode() NSSetIntValue(NSPopIntRef(), bool2num(is_mouse_printed())) end -- movemousecursorを上書き NSExec("luasub movemousecursor") function NSCOM_movemousecursor() x = NSPopInt() NSPopComma() y = NSPopInt() -- マウスカーソルを動かす。 NSExec("_movemousecursor "..tostring(x)..","..tostring(y)) move_mouse() -- 画面の更新 end end
使い方
- 上述のmouse.luaを保存する。
- system.luaの中から、NL_dofile("mouse.lua")などと呼び出す。
- NSCALL_animation関数の中から、mouse_blink()関数を呼び出すようにする。
こうするだけで一定時間(初期設定では5秒)マウスカーソルが動かなければマウスカーソルを自動で非表示にする。動かせば自動的に表示になる。
消えるまでの秒数の変更は、mouse.luaの中のlimitに代入する数値を変更すること。
その他
- getmouseposとmousemodeとmovemousecursorを上書きしているので、これ以上上書きしないように注意する。
- getmousemodeと言う、mousemodeと対になる命令を作成した。現在マウスカーソルを表示しているかいないかを取得する命令。結果を受け取る数値変数を指定する。
何に使うの?
いやなんかさ。世の中には、エロい画像の上にあるマウスカーソルが邪魔で邪魔でしょうがなく感じる人がいるらしくてさ。そんな人のためにちょちょっと作ってみたんですけど。