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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tktextwind.c

?? linux系統(tǒng)下的音頻通信
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*  * tkTextWind.c -- * *	This file contains code that allows arbitrary windows to be *	nested inside text widgets.  It also implements the "window" *	widget command for texts. * * Copyright (c) 1994 The Regents of the University of California. * Copyright (c) 1994-1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * SCCS: @(#) tkTextWind.c 1.14 97/04/25 16:52:09 */#include "tk.h"#include "tkText.h"#include "tkPort.h"/* * The following structure is the official type record for the * embedded window geometry manager: */static void		EmbWinRequestProc _ANSI_ARGS_((ClientData clientData,			    Tk_Window tkwin));static void		EmbWinLostSlaveProc _ANSI_ARGS_((ClientData clientData,			    Tk_Window tkwin));static Tk_GeomMgr textGeomType = {    "text",			/* name */    EmbWinRequestProc,		/* requestProc */    EmbWinLostSlaveProc,	/* lostSlaveProc */};/* * Definitions for alignment values: */#define ALIGN_BOTTOM		0#define ALIGN_CENTER		1#define ALIGN_TOP		2#define ALIGN_BASELINE		3/* * Macro that determines the size of an embedded window segment: */#define EW_SEG_SIZE ((unsigned) (Tk_Offset(TkTextSegment, body) \	+ sizeof(TkTextEmbWindow)))/* * Prototypes for procedures defined in this file: */static int		AlignParseProc _ANSI_ARGS_((ClientData clientData,			    Tcl_Interp *interp, Tk_Window tkwin, char *value,			    char *widgRec, int offset));static char *		AlignPrintProc _ANSI_ARGS_((ClientData clientData,			    Tk_Window tkwin, char *widgRec, int offset,			    Tcl_FreeProc **freeProcPtr));static TkTextSegment *	EmbWinCleanupProc _ANSI_ARGS_((TkTextSegment *segPtr,			    TkTextLine *linePtr));static void		EmbWinCheckProc _ANSI_ARGS_((TkTextSegment *segPtr,			    TkTextLine *linePtr));static void		EmbWinBboxProc _ANSI_ARGS_((TkTextDispChunk *chunkPtr,			    int index, int y, int lineHeight, int baseline,			    int *xPtr, int *yPtr, int *widthPtr,			    int *heightPtr));static int		EmbWinConfigure _ANSI_ARGS_((TkText *textPtr,			    TkTextSegment *ewPtr, int argc, char **argv));static void		EmbWinDelayedUnmap _ANSI_ARGS_((			    ClientData clientData));static int		EmbWinDeleteProc _ANSI_ARGS_((TkTextSegment *segPtr,			    TkTextLine *linePtr, int treeGone));static void		EmbWinDisplayProc _ANSI_ARGS_((			    TkTextDispChunk *chunkPtr, int x, int y,			    int lineHeight, int baseline, Display *display,			    Drawable dst, int screenY));static int		EmbWinLayoutProc _ANSI_ARGS_((TkText *textPtr,			    TkTextIndex *indexPtr, TkTextSegment *segPtr,			    int offset, int maxX, int maxChars,			    int noCharsYet, Tk_Uid wrapMode,			    TkTextDispChunk *chunkPtr));static void		EmbWinStructureProc _ANSI_ARGS_((ClientData clientData,			    XEvent *eventPtr));static void		EmbWinUndisplayProc _ANSI_ARGS_((TkText *textPtr,			    TkTextDispChunk *chunkPtr));/* * The following structure declares the "embedded window" segment type. */static Tk_SegType tkTextEmbWindowType = {    "window",					/* name */    0,						/* leftGravity */    (Tk_SegSplitProc *) NULL,			/* splitProc */    EmbWinDeleteProc,				/* deleteProc */    EmbWinCleanupProc,				/* cleanupProc */    (Tk_SegLineChangeProc *) NULL,		/* lineChangeProc */    EmbWinLayoutProc,				/* layoutProc */    EmbWinCheckProc				/* checkProc */};/* * Information used for parsing window configuration options: */static Tk_CustomOption alignOption = {AlignParseProc, AlignPrintProc,	(ClientData) NULL};static Tk_ConfigSpec configSpecs[] = {    {TK_CONFIG_CUSTOM, "-align", (char *) NULL, (char *) NULL,	"center", 0, TK_CONFIG_DONT_SET_DEFAULT, &alignOption},    {TK_CONFIG_STRING, "-create", (char *) NULL, (char *) NULL,	(char *) NULL, Tk_Offset(TkTextEmbWindow, create),	TK_CONFIG_DONT_SET_DEFAULT|TK_CONFIG_NULL_OK},    {TK_CONFIG_INT, "-padx", (char *) NULL, (char *) NULL,	"0", Tk_Offset(TkTextEmbWindow, padX),	TK_CONFIG_DONT_SET_DEFAULT},    {TK_CONFIG_INT, "-pady", (char *) NULL, (char *) NULL,	"0", Tk_Offset(TkTextEmbWindow, padY),	TK_CONFIG_DONT_SET_DEFAULT},    {TK_CONFIG_BOOLEAN, "-stretch", (char *) NULL, (char *) NULL,	"0", Tk_Offset(TkTextEmbWindow, stretch),	TK_CONFIG_DONT_SET_DEFAULT},    {TK_CONFIG_WINDOW, "-window", (char *) NULL, (char *) NULL,	(char *) NULL, Tk_Offset(TkTextEmbWindow, tkwin),	TK_CONFIG_DONT_SET_DEFAULT|TK_CONFIG_NULL_OK},    {TK_CONFIG_END, (char *) NULL, (char *) NULL, (char *) NULL,	(char *) NULL, 0, 0}};/* *-------------------------------------------------------------- * * TkTextWindowCmd -- * *	This procedure implements the "window" widget command *	for text widgets.  See the user documentation for details *	on what it does. * * Results: *	A standard Tcl result or error. * * Side effects: *	See the user documentation. * *-------------------------------------------------------------- */intTkTextWindowCmd(textPtr, interp, argc, argv)    register TkText *textPtr;	/* Information about text widget. */    Tcl_Interp *interp;		/* Current interpreter. */    int argc;			/* Number of arguments. */    char **argv;		/* Argument strings.  Someone else has already				 * parsed this command enough to know that				 * argv[1] is "window". */{    size_t length;    register TkTextSegment *ewPtr;    if (argc < 3) {	Tcl_AppendResult(interp, "wrong # args: should be \"",		argv[0], " window option ?arg arg ...?\"", (char *) NULL);	return TCL_ERROR;    }    length = strlen(argv[2]);    if ((strncmp(argv[2], "cget", length) == 0) && (length >= 2)) {	TkTextIndex index;	TkTextSegment *ewPtr;	if (argc != 5) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " window cget index option\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (TkTextGetIndex(interp, textPtr, argv[3], &index) != TCL_OK) {	    return TCL_ERROR;	}	ewPtr = TkTextIndexToSeg(&index, (int *) NULL);	if (ewPtr->typePtr != &tkTextEmbWindowType) {	    Tcl_AppendResult(interp, "no embedded window at index \"",		    argv[3], "\"", (char *) NULL);	    return TCL_ERROR;	}	return Tk_ConfigureValue(interp, textPtr->tkwin, configSpecs,		(char *) &ewPtr->body.ew, argv[4], 0);    } else if ((strncmp(argv[2], "configure", length) == 0) && (length >= 2)) {	TkTextIndex index;	TkTextSegment *ewPtr;	if (argc < 4) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " window configure index ?option value ...?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (TkTextGetIndex(interp, textPtr, argv[3], &index) != TCL_OK) {	    return TCL_ERROR;	}	ewPtr = TkTextIndexToSeg(&index, (int *) NULL);	if (ewPtr->typePtr != &tkTextEmbWindowType) {	    Tcl_AppendResult(interp, "no embedded window at index \"",		    argv[3], "\"", (char *) NULL);	    return TCL_ERROR;	}	if (argc == 4) {	    return Tk_ConfigureInfo(interp, textPtr->tkwin, configSpecs,		    (char *) &ewPtr->body.ew, (char *) NULL, 0);	} else if (argc == 5) {	    return Tk_ConfigureInfo(interp, textPtr->tkwin, configSpecs,		    (char *) &ewPtr->body.ew, argv[4], 0);	} else {	    TkTextChanged(textPtr, &index, &index);	    return EmbWinConfigure(textPtr, ewPtr, argc-4, argv+4);	}    } else if ((strncmp(argv[2], "create", length) == 0) && (length >= 2)) {	TkTextIndex index;	int lineIndex;	/*	 * Add a new window.  Find where to put the new window, and	 * mark that position for redisplay.	 */	if (argc < 4) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " window create index ?option value ...?\"",		    (char *) NULL);	    return TCL_ERROR;	}	if (TkTextGetIndex(interp, textPtr, argv[3], &index) != TCL_OK) {	    return TCL_ERROR;	}	/*	 * Don't allow insertions on the last (dummy) line of the text.	 */    	lineIndex = TkBTreeLineIndex(index.linePtr);	if (lineIndex == TkBTreeNumLines(textPtr->tree)) {	    lineIndex--;	    TkTextMakeIndex(textPtr->tree, lineIndex, 1000000, &index);	}	/*	 * Create the new window segment and initialize it.	 */	ewPtr = (TkTextSegment *) ckalloc(EW_SEG_SIZE);	ewPtr->typePtr = &tkTextEmbWindowType;	ewPtr->size = 1;	ewPtr->body.ew.textPtr = textPtr;	ewPtr->body.ew.linePtr = NULL;	ewPtr->body.ew.tkwin = NULL;	ewPtr->body.ew.create = NULL;	ewPtr->body.ew.align = ALIGN_CENTER;	ewPtr->body.ew.padX = ewPtr->body.ew.padY = 0;	ewPtr->body.ew.stretch = 0;	ewPtr->body.ew.chunkCount = 0;	ewPtr->body.ew.displayed = 0;	/*	 * Link the segment into the text widget, then configure it (delete	 * it again if the configuration fails).	 */	TkTextChanged(textPtr, &index, &index);	TkBTreeLinkSegment(ewPtr, &index);	if (EmbWinConfigure(textPtr, ewPtr, argc-4, argv+4) != TCL_OK) {	    TkTextIndex index2;	    TkTextIndexForwChars(&index, 1, &index2);	    TkBTreeDeleteChars(&index, &index2);	    return TCL_ERROR;	}    } else if (strncmp(argv[2], "names", length) == 0) {	Tcl_HashSearch search;	Tcl_HashEntry *hPtr;	if (argc != 3) {	    Tcl_AppendResult(interp, "wrong # args: should be \"",		    argv[0], " window names\"", (char *) NULL);	    return TCL_ERROR;	}	for (hPtr = Tcl_FirstHashEntry(&textPtr->windowTable, &search);		hPtr != NULL; hPtr = Tcl_NextHashEntry(&search)) {	    Tcl_AppendElement(interp,		    Tcl_GetHashKey(&textPtr->markTable, hPtr));	}    } else {	Tcl_AppendResult(interp, "bad window option \"", argv[2],		"\": must be cget, configure, create, or names",		(char *) NULL);	return TCL_ERROR;    }    return TCL_OK;}/* *-------------------------------------------------------------- * * EmbWinConfigure -- * *	This procedure is called to handle configuration options *	for an embedded window, using an argc/argv list. * * Results: *	The return value is a standard Tcl result.  If TCL_ERROR is *	returned, then interp->result contains an error message.. * * Side effects: *	Configuration information for the embedded window changes, *	such as alignment, stretching, or name of the embedded *	window. * *-------------------------------------------------------------- */static intEmbWinConfigure(textPtr, ewPtr, argc, argv)    TkText *textPtr;		/* Information about text widget that				 * contains embedded window. */    TkTextSegment *ewPtr;	/* Embedded window to be configured. */    int argc;			/* Number of strings in argv. */    char **argv;		/* Array of strings describing configuration				 * options. */{    Tk_Window oldWindow;    Tcl_HashEntry *hPtr;    int new;    oldWindow = ewPtr->body.ew.tkwin;    if (Tk_ConfigureWidget(textPtr->interp, textPtr->tkwin, configSpecs,	    argc, argv, (char *) &ewPtr->body.ew, TK_CONFIG_ARGV_ONLY)	    != TCL_OK) {	return TCL_ERROR;    }    if (oldWindow != ewPtr->body.ew.tkwin) {	if (oldWindow != NULL) {	    Tcl_DeleteHashEntry(Tcl_FindHashEntry(&textPtr->windowTable,		    Tk_PathName(oldWindow)));	    Tk_DeleteEventHandler(oldWindow, StructureNotifyMask,		    EmbWinStructureProc, (ClientData) ewPtr);	    Tk_ManageGeometry(oldWindow, (Tk_GeomMgr *) NULL,		    (ClientData) NULL);	    if (textPtr->tkwin != Tk_Parent(oldWindow)) {		Tk_UnmaintainGeometry(oldWindow, textPtr->tkwin);	    } else {		Tk_UnmapWindow(oldWindow);	    }	}	if (ewPtr->body.ew.tkwin != NULL) {	    Tk_Window ancestor, parent;	    /*	     * Make sure that the text is either the parent of the	     * embedded window or a descendant of that parent.  Also,	     * don't allow a top-level window to be managed inside	     * a text.	     */	    parent = Tk_Parent(ewPtr->body.ew.tkwin);	    for (ancestor = textPtr->tkwin; ;		    ancestor = Tk_Parent(ancestor)) {		if (ancestor == parent) {		    break;		}		if (Tk_IsTopLevel(ancestor)) {		    badMaster:		    Tcl_AppendResult(textPtr->interp, "can't embed ",			    Tk_PathName(ewPtr->body.ew.tkwin), " in ",			    Tk_PathName(textPtr->tkwin), (char *) NULL);		    ewPtr->body.ew.tkwin = NULL;		    return TCL_ERROR;		}	    }	    if (Tk_IsTopLevel(ewPtr->body.ew.tkwin)		    || (ewPtr->body.ew.tkwin == textPtr->tkwin)) {		goto badMaster;	    }	    /*	     * Take over geometry management for the window, plus create	     * an event handler to find out when it is deleted.	     */	    Tk_ManageGeometry(ewPtr->body.ew.tkwin, &textGeomType,		    (ClientData) ewPtr);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区高清在线观看| 欧美伊人久久大香线蕉综合69| 午夜视频久久久久久| 亚洲日本中文字幕区| 国产日本欧美一区二区| 久久久另类综合| 亚洲精品在线三区| 精品国产91洋老外米糕| 久久一区二区三区四区| 国产亚洲综合性久久久影院| 国产欧美日韩三级| 国产精品久线在线观看| 亚洲人快播电影网| 亚洲超碰精品一区二区| 午夜激情久久久| 久久成人免费网| 国产精品99久久久| 成人av在线播放网址| 色综合网站在线| 欧美日韩精品免费观看视频| 日韩一级高清毛片| 精品成人一区二区三区四区| 日本一区二区久久| 亚洲精品国产无套在线观| 亚洲一区二区三区国产| 麻豆精品一二三| 成人午夜在线播放| 欧美午夜理伦三级在线观看| 欧美一区二区三区免费视频| 久久麻豆一区二区| 一区二区三区精品在线观看| 蜜桃av噜噜一区二区三区小说| 国产成人精品亚洲777人妖| 91美女在线视频| 欧美成人欧美edvon| 亚洲日本va午夜在线影院| 日韩高清一区在线| 国产999精品久久久久久| 欧美午夜精品免费| 国产校园另类小说区| 午夜精品123| eeuss鲁片一区二区三区 | 国产亚洲一区字幕| 亚洲一区二区三区在线播放| 国产一区在线观看视频| 精品视频999| 日韩久久一区二区| 精品一区二区精品| 69p69国产精品| 亚洲免费观看高清完整版在线观看熊 | 激情五月激情综合网| 在线看国产一区二区| 精品国产免费久久| 日韩精品福利网| 91福利精品视频| 国产精品热久久久久夜色精品三区| 婷婷开心激情综合| 色美美综合视频| 中文欧美字幕免费| 激情综合网天天干| 678五月天丁香亚洲综合网| 成人免费在线视频观看| 国产99一区视频免费| 精品国产凹凸成av人网站| 日韩成人免费看| 欧美日韩国产免费一区二区 | 欧美视频一区在线| 亚洲图片另类小说| 成人av午夜影院| 国产午夜精品久久久久久久| 国产资源在线一区| 日韩欧美一区二区不卡| 日韩—二三区免费观看av| 欧美一区二区免费视频| 婷婷成人综合网| 91精品啪在线观看国产60岁| 丝袜美腿亚洲一区二区图片| 欧美日本视频在线| 五月婷婷久久综合| 欧美一区二区精品在线| 日本成人在线电影网| 日韩欧美中文字幕精品| 久久99热这里只有精品| 精品不卡在线视频| 懂色av中文一区二区三区| 亚洲国产高清在线观看视频| 成人黄色软件下载| 亚洲制服丝袜在线| 日韩一区和二区| 国内外精品视频| 中文字幕精品一区二区精品绿巨人 | 久久综合成人精品亚洲另类欧美| 蜜桃久久av一区| 精品电影一区二区三区| 精品一区二区综合| 国产精品素人一区二区| 欧美性大战久久久久久久蜜臀| 午夜精品视频一区| 国产亚洲综合av| 欧美在线免费视屏| 极品美女销魂一区二区三区免费| 久久久久久毛片| 色中色一区二区| 美女视频一区二区| 国产精品久久夜| 欧美蜜桃一区二区三区| 国产在线一区二区综合免费视频| 国产日韩精品一区二区三区在线| 99re亚洲国产精品| 奇米一区二区三区| 亚洲欧洲日韩一区二区三区| 制服丝袜亚洲精品中文字幕| 丁香网亚洲国际| 午夜精品久久久久久久蜜桃app| 久久中文娱乐网| 欧美日韩一二三| 成人夜色视频网站在线观看| 亚洲chinese男男1069| 中文字幕第一区第二区| 欧美一区二区三区在线看| 99在线精品一区二区三区| 日韩精品1区2区3区| 中文久久乱码一区二区| 欧美videos大乳护士334| 91精彩视频在线观看| 国产成人免费视频 | 日韩免费视频线观看| 91视频精品在这里| 国产精品综合一区二区| 日韩福利视频导航| 亚洲激情五月婷婷| 国产精品毛片无遮挡高清| 日韩一区二区三| 欧美又粗又大又爽| 成人国产精品免费观看视频| 美女视频黄久久| 亚洲chinese男男1069| 亚洲精品一二三四区| 国产精品视频观看| 久久精品网站免费观看| 精品国产三级a在线观看| 91 com成人网| 欧美日韩色一区| 欧美三级电影网| 在线观看91精品国产入口| aaa国产一区| 91猫先生在线| 色综合视频在线观看| 91蜜桃网址入口| 91视频一区二区三区| 一本一本大道香蕉久在线精品| 成人av电影观看| 99精品久久久久久| 91碰在线视频| 一本色道久久加勒比精品| 91美女在线看| 欧美在线一区二区三区| 欧美中文字幕亚洲一区二区va在线| 色综合天天综合网天天看片| 91免费看片在线观看| 欧美色视频在线| 日韩欧美亚洲另类制服综合在线| 欧美一卡2卡三卡4卡5免费| 日韩亚洲欧美一区| 精品国产sm最大网站| 国产日韩欧美高清| 中文字幕一区在线观看| 亚洲欧美成aⅴ人在线观看| 一区二区激情视频| 日韩av一级电影| 国产精品一区二区三区网站| av影院午夜一区| 欧美三区在线观看| 日韩欧美电影一区| 国产精品女上位| 亚洲一区二区三区美女| 亚洲午夜久久久| 毛片不卡一区二区| 成人18视频日本| 色综合久久综合网欧美综合网 | 亚洲精品一区二区三区福利| 久久精品日产第一区二区三区高清版| 国产精品视频一二三区| 亚洲国产精品自拍| 韩国欧美国产1区| 一本久久综合亚洲鲁鲁五月天| 欧美一区二区三区成人| 国产精品美女久久久久久久久| 亚洲一区二区精品视频| 国内外精品视频| 欧美日韩一区视频| 国产精品视频看| 蜜桃精品在线观看| 色老综合老女人久久久| 日韩精品在线一区二区| 亚洲人妖av一区二区| 国产麻豆9l精品三级站| 欧美精品在线观看播放| 日本一区二区动态图| 日韩专区在线视频|