⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blob.c

📁 安装DDD之前
💻 C
📖 第 1 页 / 共 2 页
字号:
	if (wc->primitive_class.border_highlight)	    (*wc->primitive_class.border_highlight) (w);    }    else {        if (wc->primitive_class.border_unhighlight)            (*wc->primitive_class.border_unhighlight) (w);    }}/************************************************************************ * *  SetValues * ************************************************************************/static Boolean SetValues (old_w, request_w, new_w, args, num_args)    Widget old_w;    Widget request_w;    Widget new_w;    ArgList args;    Cardinal *num_args;{    XmpBlobWidgetClass wc = (XmpBlobWidgetClass)XtClass(new_w);    XmpBlobWidget cw = (XmpBlobWidget)old_w;    XmpBlobWidget rw = (XmpBlobWidget)request_w;    XmpBlobWidget nw = (XmpBlobWidget)new_w;    Boolean redisplayFlag = False;    /* Validate XmNblobShape */    if (nw->blob.blob_shape != cw->blob.blob_shape) {	if (!XmRepTypeValidValue (blobShapeId, nw->blob.blob_shape, (Widget)nw))            nw->blob.blob_shape = cw->blob.blob_shape;	else	    redisplayFlag = True;    }    /* Redisplay on change in sensitivity */    if (XtIsSensitive((Widget)nw) != XtIsSensitive((Widget)cw)) {	redisplayFlag = True;    }    /* Update GC's on color change */    if (nw->primitive.foreground != cw->primitive.foreground) {	if (wc->blob_class.destroy_gc)	    (*(wc->blob_class.destroy_gc))((Widget)cw);	if (wc->blob_class.create_gc)	    (*(wc->blob_class.create_gc))((Widget)nw);        redisplayFlag = True;    }    /* Check for application geometry settings. '0' means 'ideal size' */    if (rw->core.width == 0) {	nw->core.width = 0;	nw->blob.compute_width = True;    }    else if (rw->core.width != cw->core.width) {	nw->core.width = rw->core.width;	nw->blob.pref_width = rw->core.width;	nw->blob.compute_width = False;    }    if (rw->core.height == 0) {	nw->core.height = 0;	nw->blob.compute_height = True;    }    else if (rw->core.height != cw->core.height) {	nw->core.height = rw->core.height;	nw->blob.pref_height = rw->core.height;	nw->blob.compute_height = False;    }    nw->blob.reconfigure = False;    if (nw->core.width != cw->core.width ||        nw->core.height != cw->core.height ||        nw->blob.margin_width != cw->blob.margin_width ||        nw->blob.margin_height != cw->blob.margin_height ||        nw->primitive.shadow_thickness != cw->primitive.shadow_thickness ||        nw->primitive.highlight_thickness !=                cw->primitive.highlight_thickness) {	/* If we are a Blob calculate ideal size. If we are a subclass let */	/* the subclass SetValues do it - the subclass CalcWidgetSize      */	/* method may need information derived in its SetValues method.    */	if ((WidgetClass)wc == xmpBlobWidgetClass) {	    if (wc->blob_class.calc_widget_size)		(*(wc->blob_class.calc_widget_size))((Widget)nw);	    nw->blob.pref_width = nw->core.width;	    nw->blob.pref_height = nw->core.height;	    if (nw->core.width == cw->core.width &&		nw->core.height == cw->core.height) {		if (wc->core_class.resize)		    (*(wc->core_class.resize))((Widget)nw);	    }	}	else {	    nw->blob.reconfigure = True;	} 	redisplayFlag = True;    }    return (redisplayFlag);}/************************************************************************ * *  QueryGeometry * ************************************************************************/static XtGeometryResult QueryGeometry (w, request, reply)    Widget w;    XtWidgetGeometry *request;    XtWidgetGeometry *reply;{    XmpBlobWidget bw = (XmpBlobWidget)w;    /* Return our preferred size */    if ((request->request_mode & CWWidth) &&	request->width == bw->blob.pref_width &&	(request->request_mode & CWHeight) &&	request->height == bw->blob.pref_height) {	return (XtGeometryYes);    }    if (bw->core.width == bw->blob.pref_width &&	bw->core.height == bw->blob.pref_height) {	return (XtGeometryNo);    }    reply->request_mode = (CWWidth | CWHeight);    reply->width = bw->blob.pref_width;    reply->height = bw->blob.pref_height;    return (XtGeometryAlmost);}/************************************************************************ * *  DrawVisual * ************************************************************************/static void DrawVisual (w)    Widget w;{    XmpBlobWidgetClass wc = (XmpBlobWidgetClass)XtClass(w);    XmpBlobWidget bw = (XmpBlobWidget)w;    /* Draw XmNblobShape */    if (bw->blob.visual_width > 0 && bw->blob.visual_height > 0) {	switch (bw->blob.blob_shape) {	    case(XmBLOB_OVAL):	    default:		XFillArc (XtDisplay(w), XtWindow(w),			wc->blob_class.select_gc(w),			bw->blob.visual_x, bw->blob.visual_y,			bw->blob.visual_width, bw->blob.visual_height,			0, 360 * 64);		break;	    case(XmBLOB_RECTANGLE):		XFillRectangle (XtDisplay(w), XtWindow(w),                        wc->blob_class.select_gc(w),                        bw->blob.visual_x, bw->blob.visual_y,                        bw->blob.visual_width, bw->blob.visual_height);		break;	}    }}/************************************************************************ * *  DrawShadow * ************************************************************************/static void DrawShadow (w)    Widget w;{    XmpBlobWidget bw = (XmpBlobWidget)w;    /* Draw rectangular 3D shadow */    if (bw->core.width > 2 * bw->primitive.highlight_thickness &&	bw->core.height > 2 * bw->primitive.highlight_thickness &&	bw->primitive.shadow_thickness > 0) {	_XmDrawShadows (XtDisplay (bw), XtWindow (bw),		bw->primitive.top_shadow_GC,		bw->primitive.bottom_shadow_GC,		bw->primitive.highlight_thickness,		bw->primitive.highlight_thickness,		bw->core.width - 2 * bw->primitive.highlight_thickness,		bw->core.height - 2 * bw->primitive.highlight_thickness,		bw->primitive.shadow_thickness, XmSHADOW_ETCHED_OUT);    }}/************************************************************************ * *  CreateGC * ************************************************************************/static void CreateGC (w )    Widget w;{    XmpBlobWidget bw = (XmpBlobWidget)w;    XGCValues values;    XtGCMask valueMask;    /* Create normal GC */    valueMask = GCForeground | GCBackground | GCGraphicsExposures;    values.foreground = bw->primitive.foreground;    values.background = bw->core.background_pixel;    values.graphics_exposures = False;    bw->blob.normal_gc = XtGetGC ((Widget)bw, valueMask, &values);    /* Create grayed-out GC */    valueMask |= GCFillStyle | GCStipple;    values.fill_style = FillStippled;    values.stipple = XmGetPixmapByDepth (XtScreen((Widget)(bw)),				"50_foreground", 1, 0, 1);    bw->blob.insensitive_gc = XtGetGC((Widget)bw, valueMask, &values);}/************************************************************************ * *  DestroyGC * ************************************************************************/static void DestroyGC (w)    Widget w;{    XmpBlobWidget bw = (XmpBlobWidget)w;    /* Destroy GC's */    XtReleaseGC ((Widget)bw, bw->blob.normal_gc);    XtReleaseGC ((Widget)bw, bw->blob.insensitive_gc);}/************************************************************************ * *  SelectGC * ************************************************************************/static GC SelectGC (w)    Widget w;{    XmpBlobWidget bw = (XmpBlobWidget)w;    GC drawGC;    /* Select drawing GC */    drawGC = XtIsSensitive((Widget)bw) ? bw->blob.normal_gc : bw->blob.insensitive_gc;    return (drawGC);}/************************************************************************ * *  CalcWidgetSize  * ************************************************************************/static void CalcWidgetSize (w)    Widget w;{    XmpBlobWidgetClass wc = (XmpBlobWidgetClass)XtClass(w);    XmpBlobWidget bw = (XmpBlobWidget)w;    /* Calculate ideal size. If application set geometry, use that. */    if (wc->blob_class.calc_visual_size)                (*(wc->blob_class.calc_visual_size))((Widget)bw);    if (bw->blob.compute_width)	bw->core.width = bw->blob.visual_width + 2 * (		bw->blob.margin_width +		bw->primitive.shadow_thickness +		bw->primitive.highlight_thickness);    else	bw->core.width = bw->blob.pref_width;    if (bw->blob.compute_height)	bw->core.height = bw->blob.visual_height + 2 * (		bw->blob.margin_height +		bw->primitive.shadow_thickness +		bw->primitive.highlight_thickness);    else	bw->core.height = bw->blob.pref_height;}/************************************************************************ * *  CalcVisualSize  * ************************************************************************/static void CalcVisualSize (w)    Widget w;{    XmpBlobWidget bw = (XmpBlobWidget)w;    /* Calculate ideal size of class's visual */    bw->blob.visual_width = BLOB_SIZE;    bw->blob.visual_height = BLOB_SIZE;}/************************************************************************ * *  BlobActivate * ************************************************************************/static void BlobActivate (w, event, params, num_params)    Widget w;    XEvent *event;    String *params;    Cardinal *num_params;{    /* Take focus */    XmProcessTraversal (w, XmTRAVERSE_CURRENT);    /* Activate noisily! */    XBell (XtDisplay(w), 0);}/************************************************************************ * *  XmpCreateBlob * ************************************************************************/Widget XmpCreateBlob (parent, name, arglist, argCount)    Widget parent;    char *name;    Arg *arglist;    Cardinal argCount;{    return (XtCreateWidget (name, xmpBlobWidgetClass,				parent, arglist, argCount));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -