>>ドット絵を作るソフトの開発で
>>ウィンドウ1で線を描いて ウィンドウ0で拡大して表示 をするとウィンドウ1では線が小さくて書きずらいのでどうにかしてリモート操作みたいなことをしたい
ということですが、「ウィンドウの内容を、内容を拡大した別ウィンドウで操作して描画する」という認識でよろしいでしょうか。一応それらしい動作のプログラムを組んでみましたが求めているものと違っていたらすみません。
// プログラム概要
// ウィンドウ1で拡大された内容を元にウィンドウ0を描画する
// 操作法: ウィンドウ1でクリック&ドラッグで線を引く、ESCで消去、エディットボックスで色を設定
// スクリーン0作成 (操作先)
screen 0,128,128
gsel 0,2
title "ウィンドウ0"
windowX.0=ginfo_winx
windowY.0=ginfo_winy
mes "ドット"
// スクリーン1作成 (操作元)
screen 1,512,512+30 ;RGBパネルを作るため30ピクセル拡大
title "ウィンドウ1"
windowX.1=ginfo_winx
windowY.1=ginfo_winy-30 ;30ピクセル拡大した分は描画から外すので引く
// 色指定エディットボックス作成
randomize ;ランダムに色を設定
r=rnd(256)
g=rnd(256)
b=rnd(256)
pos 50,5
input r,50,20
pos 110,5
input g,50,20
pos 170,5
input b,50,20
// メインループ
repeat
// ウィンドウ1(操作元を再描画)
gsel 1
redraw 0
color 255,255,255
boxf
color
line 0,29,windowX.1,29 ;境界線
pos 5,5
mes "RGB:" ;色指定スペース
// ウィンドウ0の内容を操作ウィンドウ(ウィンドウ1)にコピー
pos 0,30
gzoom windowX.1, windowY.1, 0, 0, 0, windowX.0, windowY.0,0
redraw 1 ;描画終わり
stick key,256 ;キー入力を取得
if (key&256) { ;左クリックだったら
// クリック位置を記憶。ウィンドウ0での座標とするため拡大率で割る
// 拡大率=ウィンドウ1の大きさ÷ウィンドウ0の大きさ
ClickX=(mousex)/(windowX.1/windowX.0)
ClickY=(mousey-30)/(windowY.1/windowY.0)
// ウィンドウ0に描画
gsel 0
color r,g,b
line oldX,oldY , ClickX,ClickY ;ドットを設定するならpsetだけど線を引くならline
// 線を引く場合は1ループ前の位置から今の位置に向けて線を引くので記憶しておく
oldX=ClickX
oldY=ClickY
}else:if (key&128) {
// ESCを押したらすべて消去するようにする
gsel 0
redraw 0
color 255,255,255
boxf
color
redraw 1
}else {
// クリックしてなかったら古い座標をカーソルの座標に更新する。
// こうしないと最後にクリックを離した位置から線が引かれてしまう
oldX=(mousex)/(windowX.1/windowX.0)
oldY=(mousey-30)/(windowY.1/windowY.0)
}
await 16 ;ループ時にはawait/waitを忘れずに
loop
stop