在 Rebol3 中制作 Hostkit 事件
Making a Hostkit Event in Rebol3
我正在制作一个具有 GUI 事件的 Rebol 3 扩展。
现在,我使用同步回调来管理它,因此每次发生鼠标移动等事件时,C 扩展都会调用 Rebol 回调函数。
但我想使用 REBEVT 和 RL->event 来管理它。
这是一个代码示例:
case SDL_MOUSEMOTION:
Add_Event_XY(
RootGob, 2, (event.motion.x + (event.motion.y << 16)), EVT_MOVE
);
/*
cbi.obj = CBI_SDL_MOUSEMOTION.obj;
cbi.word = CBI_SDL_MOUSEMOTION.word;
RXI_COUNT(args) = 1;
RXI_TYPE(args, 1) = RXT_PAIR;
args[1].pair.x = event.motion.x;
args[1].pair.y = event.motion.y;
n = RL_CALLBACK(&cbi);
if(n == 0) {RL_PRINT("%s\n", "callback error");}
*/
break;
但是当我在 Rebol 中等待时,我得到:
>> wait 1
** Script error: wake-up does not allow none! for its port argument
** Where: loop -apply- wait
** Near: loop 8 [
unless event: take sport/state [break]
port...
如何让端口不为空?
在R3代码中搜索了一番后,我发现我必须如下初始化:
system/view/event-port: open event://
现在可以了! (使用 R3 主线)
我正在制作一个具有 GUI 事件的 Rebol 3 扩展。 现在,我使用同步回调来管理它,因此每次发生鼠标移动等事件时,C 扩展都会调用 Rebol 回调函数。 但我想使用 REBEVT 和 RL->event 来管理它。
这是一个代码示例:
case SDL_MOUSEMOTION:
Add_Event_XY(
RootGob, 2, (event.motion.x + (event.motion.y << 16)), EVT_MOVE
);
/*
cbi.obj = CBI_SDL_MOUSEMOTION.obj;
cbi.word = CBI_SDL_MOUSEMOTION.word;
RXI_COUNT(args) = 1;
RXI_TYPE(args, 1) = RXT_PAIR;
args[1].pair.x = event.motion.x;
args[1].pair.y = event.motion.y;
n = RL_CALLBACK(&cbi);
if(n == 0) {RL_PRINT("%s\n", "callback error");}
*/
break;
但是当我在 Rebol 中等待时,我得到:
>> wait 1
** Script error: wake-up does not allow none! for its port argument
** Where: loop -apply- wait
** Near: loop 8 [
unless event: take sport/state [break]
port...
如何让端口不为空?
在R3代码中搜索了一番后,我发现我必须如下初始化:
system/view/event-port: open event://
现在可以了! (使用 R3 主线)