#module
#deffunc gcurinit str, int, int, int, int, int, int
mref file, 32 : mref id, 1 : mref x, 2 : mref y, 3 : mref r, 4 : mref g, 5 : mref b, 6
tmpwin = id
px = x : py = y
tr = r : tg = g : tb = b
mref bmscr, 67
// アクティブウィンドウ取得
actwin = bmscr.18
wx = winx : wy = winy
// 画像のサイズ取得用
buffer tmpwin
picload file
sx = winx : sy = winy
buffer tmpwin, (wx > sx) * wx + ((wx <= sx) * sx), (wy > sy) * wy + ((wy <= sy) * sy) + sy
// カーソルロード
picload file, 1
pos 0, sy : gcopy actwin, , , wx, wy
gsel actwin
draw = 0
return
#deffunc gcurdraw int, int, int, int
mref left, 0
mref top, 1
mref right, 2
mref bottom, 3
// アクティブウィンドウチェック
ginfo 1
if prmx != actwin : return
// 座標をチェックし、動いてないなら再描画しない
mx = mousex : my = mousey
if mx = mx.1 & (my = my.1) : return
// 一旦カーソルを削除
redraw 0
if draw : pos mx.1, my.1 : gcopy tmpwin, mx.1, my.1 + sy, sx, sy
// 描画範囲外
if left > mx | (top > my) | (right < mx) | (bottom < my) {
if draw {
draw = 0
mouse
}
// 描画範囲内
} else {
mx.1 = mx + px : my.1 = my + py
if draw = 0 : draw = 1 : mouse -1 : color tr, tg, tb : gmode 4, sx, sy, 256
pos mx + px, my + py : gcopy tmpwin
}
redraw 1
return
#global
picload "sample/hspdx/hspdx.bmp"
area = 200, 100, 500, 300
color 200, 200, 100 : boxf area.0, area.1, area.2, area.3 // カーソル使用エリアを色づけ
gcurinit "gcur.bmp", 2, 1, 1, 128, 128, 128
repeat
title "" + mousex + ", "+ mousey
gcurdraw area.0, area.1, area.2, area.3
wait 1
loop
|