亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lib_mouse.c

?? ncurses-5.4 需要的就來下把 一定會有用的哦
?? C
?? 第 1 頁 / 共 3 頁
字號:
     *     * We accomplish this in two passes.  The first pass merges press/release     * pairs into click events.  The second merges runs of click events into     * double or triple-click events.     *     * It's possible that the run may not resolve to a single event (for     * example, if the user quadruple-clicks).  If so, leading events     * in the run are ignored.     *     * Note that this routine is independent of the format of the specific     * format of the pointing-device's reports.  We can use it to parse     * gestures on anything that reports press/release events on a per-     * button basis, as long as the device-dependent mouse code puts stuff     * on the queue in MEVENT format.     */    if (runcount == 1) {	TR(MY_TRACE,	   ("_nc_mouse_parse: returning simple mouse event %s at slot %ld",	    _tracemouse(prev),	    (long) (prev - events)));	return (prev->id >= NORMAL_EVENT)	    ? ((prev->bstate & eventmask) ? TRUE : FALSE)	    : FALSE;    }    /* find the start of the run */    runp = eventp;    for (n = runcount; n > 0; n--) {	runp = PREV(runp);    }#ifdef TRACE    if (_nc_tracing & TRACE_IEVENT) {	_trace_slot("before mouse press/release merge:");	_tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",		(long) (runp - events),		(long) ((eventp - events) + (EV_MAX - 1)) % EV_MAX,		runcount);    }#endif /* TRACE */    /* first pass; merge press/release pairs */    do {	merge = FALSE;	for (ep = runp; (next = NEXT(ep)) != eventp; ep = next) {	    if (ep->x == next->x && ep->y == next->y		&& (ep->bstate & BUTTON_PRESSED)		&& (!(ep->bstate & BUTTON1_PRESSED)		    == !(next->bstate & BUTTON1_RELEASED))		&& (!(ep->bstate & BUTTON2_PRESSED)		    == !(next->bstate & BUTTON2_RELEASED))		&& (!(ep->bstate & BUTTON3_PRESSED)		    == !(next->bstate & BUTTON3_RELEASED))		) {		if ((eventmask & BUTTON1_CLICKED)		    && (ep->bstate & BUTTON1_PRESSED)) {		    ep->bstate &= ~BUTTON1_PRESSED;		    ep->bstate |= BUTTON1_CLICKED;		    merge = TRUE;		}		if ((eventmask & BUTTON2_CLICKED)		    && (ep->bstate & BUTTON2_PRESSED)) {		    ep->bstate &= ~BUTTON2_PRESSED;		    ep->bstate |= BUTTON2_CLICKED;		    merge = TRUE;		}		if ((eventmask & BUTTON3_CLICKED)		    && (ep->bstate & BUTTON3_PRESSED)) {		    ep->bstate &= ~BUTTON3_PRESSED;		    ep->bstate |= BUTTON3_CLICKED;		    merge = TRUE;		}		if (merge)		    next->id = INVALID_EVENT;	    }	}    } while	(merge);#ifdef TRACE    if (_nc_tracing & TRACE_IEVENT) {	_trace_slot("before mouse click merge:");	_tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",		(long) (runp - events),		(long) ((eventp - events) + (EV_MAX - 1)) % EV_MAX,		runcount);    }#endif /* TRACE */    /*     * Second pass; merge click runs.  At this point, click events are     * each followed by one invalid event. We merge click events     * forward in the queue.     *     * NOTE: There is a problem with this design!  If the application     * allows enough click events to pile up in the circular queue so     * they wrap around, it will cheerfully merge the newest forward     * into the oldest, creating a bogus doubleclick and confusing     * the queue-traversal logic rather badly.  Generally this won't     * happen, because calling getmouse() marks old events invalid and     * ineligible for merges.  The true solution to this problem would     * be to timestamp each MEVENT and perform the obvious sanity check,     * but the timer element would have to have sub-second resolution,     * which would get us into portability trouble.     */    do {	MEVENT *follower;	merge = FALSE;	for (ep = runp; (next = NEXT(ep)) != eventp; ep = next)	    if (ep->id != INVALID_EVENT) {		if (next->id != INVALID_EVENT)		    continue;		follower = NEXT(next);		if (follower->id == INVALID_EVENT)		    continue;		/* merge click events forward */		if ((ep->bstate & BUTTON_CLICKED)		    && (follower->bstate & BUTTON_CLICKED)) {		    if ((eventmask & BUTTON1_DOUBLE_CLICKED)			&& (follower->bstate & BUTTON1_CLICKED)) {			follower->bstate &= ~BUTTON1_CLICKED;			follower->bstate |= BUTTON1_DOUBLE_CLICKED;			merge = TRUE;		    }		    if ((eventmask & BUTTON2_DOUBLE_CLICKED)			&& (follower->bstate & BUTTON2_CLICKED)) {			follower->bstate &= ~BUTTON2_CLICKED;			follower->bstate |= BUTTON2_DOUBLE_CLICKED;			merge = TRUE;		    }		    if ((eventmask & BUTTON3_DOUBLE_CLICKED)			&& (follower->bstate & BUTTON3_CLICKED)) {			follower->bstate &= ~BUTTON3_CLICKED;			follower->bstate |= BUTTON3_DOUBLE_CLICKED;			merge = TRUE;		    }		    if (merge)			ep->id = INVALID_EVENT;		}		/* merge double-click events forward */		if ((ep->bstate &		     (BUTTON1_DOUBLE_CLICKED		      | BUTTON2_DOUBLE_CLICKED		      | BUTTON3_DOUBLE_CLICKED))		    && (follower->bstate & BUTTON_CLICKED)) {		    if ((eventmask & BUTTON1_TRIPLE_CLICKED)			&& (follower->bstate & BUTTON1_CLICKED)) {			follower->bstate &= ~BUTTON1_CLICKED;			follower->bstate |= BUTTON1_TRIPLE_CLICKED;			merge = TRUE;		    }		    if ((eventmask & BUTTON2_TRIPLE_CLICKED)			&& (follower->bstate & BUTTON2_CLICKED)) {			follower->bstate &= ~BUTTON2_CLICKED;			follower->bstate |= BUTTON2_TRIPLE_CLICKED;			merge = TRUE;		    }		    if ((eventmask & BUTTON3_TRIPLE_CLICKED)			&& (follower->bstate & BUTTON3_CLICKED)) {			follower->bstate &= ~BUTTON3_CLICKED;			follower->bstate |= BUTTON3_TRIPLE_CLICKED;			merge = TRUE;		    }		    if (merge)			ep->id = INVALID_EVENT;		}	    }    } while	(merge);#ifdef TRACE    if (_nc_tracing & TRACE_IEVENT) {	_trace_slot("before mouse event queue compaction:");	_tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",		(long) (runp - events),		(long) ((eventp - events) + (EV_MAX - 1)) % EV_MAX,		runcount);    }#endif /* TRACE */    /*     * Now try to throw away trailing events flagged invalid, or that     * don't match the current event mask.     */    for (; runcount; prev = PREV(eventp), runcount--)	if (prev->id == INVALID_EVENT || !(prev->bstate & eventmask)) {	    eventp = prev;	}#ifdef TRACE    if (_nc_tracing & TRACE_IEVENT) {	_trace_slot("after mouse event queue compaction:");	_tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",		(long) (runp - events),		(long) ((eventp - events) + (EV_MAX - 1)) % EV_MAX,		runcount);    }    for (ep = runp; ep != eventp; ep = NEXT(ep))	if (ep->id != INVALID_EVENT)	    TR(MY_TRACE,	       ("_nc_mouse_parse: returning composite mouse event %s at slot %ld",		_tracemouse(ep),		(long) (ep - events)));#endif /* TRACE */    /* after all this, do we have a valid event? */    return (PREV(eventp)->id != INVALID_EVENT);}static void_nc_mouse_wrap(SCREEN * sp GCC_UNUSED)/* release mouse -- called by endwin() before shellout/exit */{    TR(MY_TRACE, ("_nc_mouse_wrap() called"));    switch (SP->_mouse_type) {    case M_XTERM:	if (eventmask)	    mouse_activate(FALSE);	break;#if USE_GPM_SUPPORT	/* GPM: pass all mouse events to next client */    case M_GPM:	break;#endif#if USE_SYSMOUSE    case M_SYSMOUSE:	mouse_activate(FALSE);	break;#endif    case M_NONE:	break;    }}static void_nc_mouse_resume(SCREEN * sp GCC_UNUSED)/* re-connect to mouse -- called by doupdate() after shellout */{    TR(MY_TRACE, ("_nc_mouse_resume() called"));    switch (SP->_mouse_type) {    case M_XTERM:	/* xterm: re-enable reporting */	if (eventmask)	    mouse_activate(TRUE);	break;#if USE_GPM_SUPPORT    case M_GPM:	/* GPM: reclaim our event set */	break;#endif#if USE_SYSMOUSE    case M_SYSMOUSE:	mouse_activate(TRUE);	break;#endif    case M_NONE:	break;    }}/************************************************************************** * * Mouse interface entry points for the API * **************************************************************************/NCURSES_EXPORT(int)getmouse(MEVENT * aevent)/* grab a copy of the current mouse event */{    T((T_CALLED("getmouse(%p)"), aevent));    if (aevent && (SP->_mouse_type != M_NONE)) {	/* compute the current-event pointer */	MEVENT *prev = PREV(eventp);	/* copy the event we find there */	*aevent = *prev;	TR(TRACE_IEVENT, ("getmouse: returning event %s from slot %ld",			  _tracemouse(prev),			  (long) (prev - events)));	prev->id = INVALID_EVENT;	/* so the queue slot becomes free */	returnCode(OK);    }    returnCode(ERR);}NCURSES_EXPORT(int)ungetmouse(MEVENT * aevent)/* enqueue a synthesized mouse event to be seen by the next wgetch() */{    T((T_CALLED("ungetmouse(%p)"), aevent));    /* stick the given event in the next-free slot */    *eventp = *aevent;    /* bump the next-free pointer into the circular list */    eventp = NEXT(eventp);    /* push back the notification event on the keyboard queue */    returnCode(ungetch(KEY_MOUSE));}NCURSES_EXPORT(mmask_t)mousemask(mmask_t newmask, mmask_t * oldmask)/* set the mouse event mask */{    mmask_t result = 0;    T((T_CALLED("mousemask(%#lx,%p)"), newmask, oldmask));    if (oldmask)	*oldmask = eventmask;    if (!newmask && !initialized)	returnBits(0);    _nc_mouse_init();    if (SP->_mouse_type != M_NONE) {	eventmask = newmask &	    (REPORT_MOUSE_POSITION | BUTTON_ALT | BUTTON_CTRL | BUTTON_SHIFT	     | BUTTON_PRESSED	     | BUTTON_RELEASED	     | BUTTON_CLICKED	     | BUTTON1_DOUBLE_CLICKED | BUTTON1_TRIPLE_CLICKED	     | BUTTON2_DOUBLE_CLICKED | BUTTON2_TRIPLE_CLICKED	     | BUTTON3_DOUBLE_CLICKED | BUTTON3_TRIPLE_CLICKED);	mouse_activate(eventmask != 0);	result = eventmask;    }    returnBits(result);}NCURSES_EXPORT(bool)wenclose(const WINDOW *win, int y, int x)/* check to see if given window encloses given screen location */{    bool result = FALSE;    T((T_CALLED("wenclose(%p,%d,%d)"), win, y, x));    if (win != 0) {	y -= win->_yoffset;	result = ((win->_begy <= y &&		   win->_begx <= x &&		   (win->_begx + win->_maxx) >= x &&		   (win->_begy + win->_maxy) >= y) ? TRUE : FALSE);    }    returnBool(result);}NCURSES_EXPORT(int)mouseinterval(int maxclick)/* set the maximum mouse interval within which to recognize a click */{    int oldval;    T((T_CALLED("mouseinterval(%d)"), maxclick));    if (SP != 0) {	oldval = SP->_maxclick;	if (maxclick >= 0)	    SP->_maxclick = maxclick;    } else {	oldval = DEFAULT_MAXCLICK;    }    returnCode(oldval);}/* This may be used by other routines to ask for the existence of mouse   support */NCURSES_EXPORT(int)_nc_has_mouse(void){    return (SP->_mouse_type == M_NONE ? 0 : 1);}NCURSES_EXPORT(bool)wmouse_trafo(const WINDOW *win, int *pY, int *pX, bool to_screen){    bool result = FALSE;    T((T_CALLED("wmouse_trafo(%p,%p,%p,%d)"), win, pY, pX, to_screen));    if (win && pY && pX) {	int y = *pY;	int x = *pX;	if (to_screen) {	    y += win->_begy + win->_yoffset;	    x += win->_begx;	    if (wenclose(win, y, x))		result = TRUE;	} else {	    if (wenclose(win, y, x)) {		y -= (win->_begy + win->_yoffset);		x -= win->_begx;		result = TRUE;	    }	}	if (result) {	    *pX = x;	    *pY = y;	}    }    returnBool(result);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu国产日韩综合| 青青草91视频| 国产精品成人一区二区三区夜夜夜| 欧美一级精品大片| 在线成人午夜影院| 在线电影院国产精品| 欧美精品亚洲二区| 欧美高清hd18日本| 欧美美女一区二区三区| 欧美三日本三级三级在线播放| 色噜噜狠狠色综合欧洲selulu| 99精品偷自拍| 91免费观看视频| 色老综合老女人久久久| 在线免费观看日韩欧美| 欧美体内she精高潮| 欧美人与z0zoxxxx视频| 91精品一区二区三区在线观看| 7777精品伊人久久久大香线蕉超级流畅| 欧美天堂亚洲电影院在线播放| 欧美日韩大陆在线| 日韩美女视频在线| 国产亚洲欧美中文| 国产精品短视频| 亚洲专区一二三| 香蕉成人啪国产精品视频综合网| 日本伊人色综合网| 九九在线精品视频| 成人一区二区三区视频| 成人av网址在线观看| 欧洲精品一区二区三区在线观看| 欧美日韩一级二级三级| 精品国产乱码久久久久久1区2区| 久久在线观看免费| 亚洲人123区| 爽爽淫人综合网网站| 国产在线观看一区二区| 成人sese在线| 欧美日韩精品福利| 日本一区二区三区在线不卡| 一区二区三区四区蜜桃 | 蓝色福利精品导航| 国产精品一线二线三线| 一本一道综合狠狠老| 欧美一区二区精品在线| 国产日韩欧美高清| 亚洲午夜久久久久久久久电影院| 麻豆视频观看网址久久| 92精品国产成人观看免费| 欧美剧在线免费观看网站| 久久精品亚洲乱码伦伦中文 | 亚洲成a人片在线观看中文| 韩国av一区二区三区在线观看| 91在线国内视频| 欧美xxxx在线观看| 亚洲精品成人精品456| 国产精品一区免费视频| 欧美日韩精品一区二区天天拍小说| 久久久久久久久免费| 亚洲成av人片一区二区梦乃 | 国产精品国产三级国产普通话99| 亚洲成人综合在线| 豆国产96在线|亚洲| 51午夜精品国产| 亚洲人一二三区| 国产自产视频一区二区三区| 欧美色男人天堂| 亚洲欧洲无码一区二区三区| 精品中文av资源站在线观看| 欧美日韩亚洲高清一区二区| 国产精品久久久久久福利一牛影视 | 久久久综合激的五月天| 天天射综合影视| 91在线国产福利| 国产精品视频麻豆| 久久国产福利国产秒拍| 欧美丰满高潮xxxx喷水动漫| 中文字幕亚洲在| 国产suv精品一区二区6| 欧美va天堂va视频va在线| 日韩精品五月天| 欧美在线一二三四区| 亚洲欧洲av一区二区三区久久| 国产精品99久久久久久宅男| 日韩免费看网站| 日韩国产欧美一区二区三区| 欧美怡红院视频| 亚洲黄一区二区三区| 91一区二区三区在线观看| 国产日韩欧美在线一区| 国产一区二区三区免费在线观看| 日韩免费观看2025年上映的电影| 午夜激情综合网| 欧美日韩一区二区三区高清| 亚洲午夜久久久久久久久电影网 | 北条麻妃一区二区三区| 日本一区二区成人| 成人一区二区三区视频| 国产精品人成在线观看免费| 福利一区在线观看| 国产日韩欧美麻豆| 国产福利不卡视频| 国产女主播一区| 国产成人av一区二区| 国产欧美日韩亚州综合| 成人免费精品视频| 国产精品国产三级国产aⅴ中文 | 6080午夜不卡| 蜜桃av噜噜一区二区三区小说| 91精品欧美久久久久久动漫 | 国产激情视频一区二区三区欧美| 欧美r级在线观看| 精品一区二区免费视频| 亚洲精品在线观看视频| 国产一区二区三区不卡在线观看| 国产喷白浆一区二区三区| 丁香网亚洲国际| 日韩一区在线播放| 色综合久久久久久久| 亚洲五月六月丁香激情| 3d成人动漫网站| 国产一区二区三区日韩| 17c精品麻豆一区二区免费| 色综合婷婷久久| 亚洲va欧美va人人爽| 日韩亚洲欧美中文三级| 国产精品中文有码| 亚洲欧美偷拍卡通变态| 欧美另类一区二区三区| 精品亚洲免费视频| 国产精品国产自产拍高清av| 色香色香欲天天天影视综合网| 午夜私人影院久久久久| 精品国产精品网麻豆系列| 国产99精品视频| 亚洲一区二区三区自拍| 精品欧美久久久| av不卡免费电影| 首页国产欧美日韩丝袜| 国产无一区二区| 91福利国产精品| 激情综合网最新| 亚洲美女在线一区| 欧美一级生活片| eeuss影院一区二区三区| 亚洲h精品动漫在线观看| 2020国产精品久久精品美国| 91麻豆免费观看| 久久不见久久见中文字幕免费| 国产精品理论片| 欧美一区二区三区的| 成人免费看黄yyy456| 视频一区二区三区在线| 国产欧美日韩一区二区三区在线观看| 欧美视频在线播放| 国产精品一卡二| 午夜亚洲福利老司机| 国产精品国产三级国产专播品爱网| 欧美放荡的少妇| 91原创在线视频| 狠狠色综合播放一区二区| 亚洲一区二区三区中文字幕在线 | 日韩黄色免费网站| 国产精品欧美极品| 欧美一级搡bbbb搡bbbb| 91麻豆国产福利在线观看| 极品尤物av久久免费看| 亚洲国产你懂的| 国产精品麻豆久久久| 日韩欧美三级在线| 在线观看国产日韩| 成人动漫视频在线| 韩国理伦片一区二区三区在线播放| 亚洲一区二区三区视频在线| 中文一区在线播放| 欧美成人官网二区| 欧美日韩高清一区二区三区| 91毛片在线观看| 成人精品视频一区| 久久电影网电视剧免费观看| 亚洲va天堂va国产va久| 亚洲综合精品自拍| 亚洲欧洲精品天堂一级| 中文字幕欧美日本乱码一线二线| 精品少妇一区二区三区| 8v天堂国产在线一区二区| 91久久精品一区二区二区| 不卡的av中国片| 国产凹凸在线观看一区二区| 国产麻豆午夜三级精品| 久久99久久精品| 美国十次了思思久久精品导航| 亚洲超碰97人人做人人爱| 亚洲一二三区不卡| 一个色在线综合| 一区二区三区欧美在线观看| 亚洲欧美日韩成人高清在线一区| 国产精品家庭影院| 综合久久久久久久| 自拍偷拍亚洲综合|