示例#1
0
文件: DrawnB.c 项目: att/uwin
static void
expose(Widget w, XEvent *event, Region region)
{
    XmDrawnButtonCallbackStruct cbs;

    DEBUGOUT(_LtDebug(__FILE__, w, "Expose (%dx%d%+d%+d)\n",
		      XtWidth(w), XtHeight(w),XtX(w),XtY(w)));

#define superclass (&xmLabelClassRec)
    (*superclass->core_class.expose) (w, event, region);
#undef superclass
#if 0
    /* rws 24 Oct 1998
       mfm clipboard pixmap
     */
    if (XtSensitive(w) &&
	     Lab_Pixmap(w) != XmUNSPECIFIED_PIXMAP)
    {
	XCopyArea(XtDisplay(w),
		  Lab_Pixmap(w),
		  XtWindow(w),
		  Lab_NormalGC(w),
		  0,
		  0,
		  Lab_TextRect_width(w),
		  Lab_TextRect_height(w),
		  (XtWidth(w) - Lab_TextRect_width(w)) / 2,
		  (XtHeight(w) - Lab_TextRect_height(w)) / 2);
    }
    else if (!XtSensitive(w) &&
	     Lab_PixmapInsensitive(w) != XmUNSPECIFIED_PIXMAP)
    {
	XCopyArea(XtDisplay(w),
		  Lab_PixmapInsensitive(w),
		  XtWindow(w),
		  Lab_InsensitiveGC(w),
		  0,
		  0,
		  Lab_TextRect_width(w),
		  Lab_TextRect_height(w),
		  Lab_TextRect_x(w), Lab_TextRect_y(w));
    }
#endif

    _XmDrawShadows(XtDisplay(w), XtWindow(w),
		   Prim_TopShadowGC(w), Prim_BottomShadowGC(w),
		   Prim_HighlightThickness(w), Prim_HighlightThickness(w),
		   XtWidth(w) - (Prim_HighlightThickness(w) << 1),
		   XtHeight(w) - (Prim_HighlightThickness(w) << 1),
		   Prim_ShadowThickness(w),
		   DB_PushButtonEnabled(w)
		   ? XtSensitive(w) && DB_Armed(w)
		     ? XmSHADOW_IN
		     : XmSHADOW_OUT
		   : DB_ShadowType(w));

    if (DB_ExposeCallback(w))
    {
	cbs.reason = XmCR_EXPOSE;
	cbs.event = event;
	cbs.window = XtWindow(w);
	cbs.click_count = DB_ClickCount(w);

	XFlush(XtDisplay(w));

	XtCallCallbackList(w,
			   DB_ExposeCallback(w),
			   (XtPointer)&cbs);
    }
}
示例#2
0
void
GaugePick(Widget WXUNUSED(w), XEvent *WXUNUSED(e), String *WXUNUSED(args), Cardinal  *WXUNUSED(num_args))
{
    /* Commented out for a read-only gauge in wxWidgets */
#if 0
    XmGaugeWidget gw = (XmGaugeWidget)w;
#define THIS gw->gauge
    int size, sht;
    float ratio;
    Boolean dragging = False;
    XButtonEvent *event = (XButtonEvent *)e;
    int x, y;

    x = event->x;
    y = event->y;
    sht = gw->primitive.shadow_thickness;
    _XmDrawShadows(XtDisplay(w), XtWindow(w),
        gw->primitive.top_shadow_GC,
        gw->primitive.bottom_shadow_GC,
        0, 0, w->core.width, w->core.height,
        sht, XmSHADOW_IN);


    ratio = (float)((float)THIS.maximum -
        (float)THIS.minimum) / (float)THIS.value;
    switch(THIS.orientation) {
    case XmHORIZONTAL:
        size = (w->core.width - 2 * sht) / ratio;
        switch(THIS.processingDirection) {
        case XmMAX_ON_RIGHT:
        case XmMAX_ON_BOTTOM:
            dragging = (x > sht) && (y > sht) &&
                (x < sht + size) && (y < w->core.height - sht);
            break;
        case XmMAX_ON_LEFT:
        case XmMAX_ON_TOP:
            dragging = (x > w->core.width - size - sht) && (y > sht) &&
                (x < w->core.width - sht) && (y < w->core.height + sht);
            break;
        }
        break;
        case XmVERTICAL:
            size = (w->core.height - 2 * sht) / ratio;
            switch(THIS.processingDirection) {
            case XmMAX_ON_RIGHT:
            case XmMAX_ON_BOTTOM:
                dragging = (x > sht) && (y > sht) &&
                    (x < w->core.width - sht) &&
                    (y < w->core.width - 2 * sht + size);
                break;
            case XmMAX_ON_LEFT:
            case XmMAX_ON_TOP:
                dragging = (x > sht) && (y > w->core.height - size - sht) &&
                    (x < w->core.width - sht) && (y < w->core.height - sht);
            }
            break;
    }
    THIS.dragging = dragging;
    THIS.oldx = x;
    THIS.oldy = y;
#undef THIS
#endif
}
示例#3
0
/*----------------------------------------------------------------------*/
static void
AccentAll(Widget			w,
		  GC				top_gc,
		  GC				bottom_gc,
		  Dimension			offset_left,
		  Dimension			offset_right,
		  Dimension			shadow_thickness,
		  Dimension			accent_thickness,
		  int				code)
{
#if 1	
	if (code == ACCENT_DRAW)
	{
		/* Draw accent */
		_XmDrawShadows(XtDisplay(w),_XfeWindow(w),
					   top_gc,bottom_gc,
					   _XfeHighlightThickness(w),
					   _XfeHighlightThickness(w),
					   _XfeWidth(w) - 2 * _XfeHighlightThickness(w),
					   _XfeHeight(w) - 2 * _XfeHighlightThickness(w),
					   _XfeShadowThickness(w),
					   XmSHADOW_OUT);
	}
	else
	{
		/* Erase accent */
		XfeDrawRectangle(XtDisplay(w),_XfeWindow(w),top_gc,
						 _XfeHighlightThickness(w),
						 _XfeHighlightThickness(w),
						 _XfeWidth(w) - 2 * _XfeHighlightThickness(w),
						 _XfeHeight(w) - 2 * _XfeHighlightThickness(w),
						 _XfeShadowThickness(w));
	}
#else
	Widget		pw = _XfeParent(w);
	int			position_index = XfeMenuItemPositionIndex(w);
	Cardinal	num_children = _XfemNumChildren(pw);
	Position	x;
	Position	y;
	Dimension	width;
	Dimension	height;
	Dimension	total_thickness = shadow_thickness + accent_thickness;

	assert( code == ACCENT_DRAW || code == ACCENT_ERASE );

	/* One and only */
	if (num_children == 1)
	{
		x = _XfeX(w) + offset_left;
		y = _XfeY(w);

		width = _XfeWidth(w) - offset_left - offset_right;
		height = _XfeHeight(w);
	}
	else
	{
		Dimension overlap = (2 * shadow_thickness + accent_thickness) / 2;

		/* First item */
		if (position_index == 0)
		{
			x = _XfeX(w) + offset_left;
			y = _XfeY(w);
			
			width = _XfeWidth(w) - offset_left - offset_right;

			height = _XfeHeight(w) + overlap;
		}
		/* Last item */
		else if (position_index == (num_children - 1))
		{
			x = _XfeX(w) + offset_left;
			y = _XfeY(w) - overlap;
			
			width = _XfeWidth(w) - offset_left - offset_right;

			height = _XfeHeight(w) + overlap;
		}
		/* In between two others */
		else
		{
			x = _XfeX(w) + offset_left;
			y = _XfeY(w) - overlap;
			
			width = _XfeWidth(w) - offset_left - offset_right;

			height = _XfeHeight(w) + 2 * total_thickness;
		}
	}

	if (code == ACCENT_DRAW)
	{
		/* Draw accent */
		_XmDrawShadows(XtDisplay(pw),_XfeWindow(pw),top_gc,bottom_gc,
				   x,y,width,height,shadow_thickness,XmSHADOW_IN);
		
		x += total_thickness;
		y += total_thickness;
		
		width -= (2 * total_thickness);
		height -= (2 * total_thickness);
				   
		_XmDrawShadows(XtDisplay(pw),_XfeWindow(pw),top_gc,bottom_gc,
					   x,y,width,height,shadow_thickness,XmSHADOW_OUT);
	}
	else
	{
		/* Erase accent */
		XfeDrawRectangle(XtDisplay(pw),_XfeWindow(pw),top_gc,
						 x,y,width,height,shadow_thickness);
		
		x += total_thickness;
		y += total_thickness;
		
		width -= (2 * total_thickness);
		height -= (2 * total_thickness);
				   
		XfeDrawRectangle(XtDisplay(pw),_XfeWindow(pw),top_gc,
						 x,y,width,height,shadow_thickness);
	}
#endif
}
示例#4
0
/* ARGSUSED */
static void 
Redisplay(Widget gw, XEvent * event, Region region)
{
    XmPannerWidget pw = (XmPannerWidget) gw;
    Display *dpy = XtDisplay(gw);
    Window w = XtWindow(gw);
    int pad = (XmPanner_internal_border(pw) +
	       pw->primitive.highlight_thickness +
	       pw->primitive.shadow_thickness);
    int dx, dy, width, height;
    int kx = XmPanner_knob_x(pw) + pad, ky = XmPanner_knob_y(pw) + pad;

    XmPanner_tmp(pw).showing = FALSE;

    if (event != NULL) {
	dx = dy = pw->primitive.highlight_thickness;
	width = pw->core.width - (2 * dx);
	height = pw->core.height - (2 * dy);
	
	_XmDrawShadows(XtDisplay(gw), XtWindow(gw), 
		       pw->primitive.bottom_shadow_GC, 
		       pw->primitive.top_shadow_GC, dx, dy, width, height,
		       pw->primitive.shadow_thickness, XmSHADOW_OUT);

	if (pw->primitive.highlighted) 
	    (*(xmPrimitiveClassRec.primitive_class.border_highlight))(gw);
	else
	    (*(xmPrimitiveClassRec.primitive_class.border_unhighlight))(gw);
    }

    if ((XmPanner_tmp(pw).doing && XmPanner_rubber_band(pw)) || (event == NULL))
    {
	XClearArea (XtDisplay(pw), XtWindow(pw), 
		    (int) XmPanner_last_x(pw) + pad, 
		    (int) XmPanner_last_y(pw) + pad, 
		    (unsigned int) (XmPanner_knob_width(pw)),
		    (unsigned int) (XmPanner_knob_height(pw)),
		    False);
    }

    XmPanner_last_x(pw) = XmPanner_knob_x(pw);
    XmPanner_last_y(pw) = XmPanner_knob_y(pw);

    XmeDrawShadows(XtDisplay(gw), XtWindow(gw), 
		   pw->primitive.top_shadow_GC,
		   pw->primitive.bottom_shadow_GC,
		   kx, ky, XmPanner_knob_width(pw), XmPanner_knob_height(pw),
		   pw->primitive.shadow_thickness, XmSHADOW_OUT);

    dx = kx + pw->primitive.shadow_thickness;
    dy = ky + pw->primitive.shadow_thickness;

    if (((int)XmPanner_knob_width(pw) >
	 (int)(2 * pw->primitive.shadow_thickness)) &&
	((int)XmPanner_knob_height(pw) >
	 (int)(2 * pw->primitive.shadow_thickness)))
    {
	width = XmPanner_knob_width(pw) - (2 * pw->primitive.shadow_thickness);
	height = XmPanner_knob_height(pw) - (2 * pw->primitive.shadow_thickness);
	
	XFillRectangle (dpy, w, XmPanner_slider_gc(pw), dx, dy, width, height);
    }

    if (XmPanner_tmp(pw).doing && XmPanner_rubber_band(pw)) 
	DRAW_TMP (pw);
}