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

📄 callbacks.c

📁 安装DDD之前
💻 C
字号:
/* $Header: /cvsroot/lesstif/lesstif/test/Xm/drag_icon/callbacks.c,v 1.2 2001/05/23 13:45:57 amai Exp $ */#include <stdio.h>#include <Xm/Xm.h>#include "bitmap.h"/* Callbacks for our palette of pixmaps (an XmDrawingArea) */extern void drag_bitmap();extern Bitmap_t bitmaps[];GC              gc = NULL;static voidcreate_gc(w)	Widget          w;{	XGCValues       values;	int             i = 0;	Pixel           fg, bg;	if (gc != 0)		return;	XtVaGetValues(w, XmNforeground, &fg, XmNbackground, &bg, NULL);	values.foreground = fg;	values.background = bg;	values.fill_style = FillOpaqueStippled;	gc = XCreateGC(XtDisplay(w), XtWindow(w), GCForeground | GCBackground | GCFillStyle, &values);	while (bitmaps[i].name) {		bitmaps[i].pixmap = XCreatePixmapFromBitmapData(XtDisplay(w), XtWindow(w), bitmaps[i].data, bitmaps[i].width, bitmaps[i].height, fg, bg, DefaultDepthOfScreen(XtScreen(w)));		bitmaps[i].bitmap = XCreateBitmapFromData(XtDisplay(w), XtWindow(w), bitmaps[i].data, bitmaps[i].width, bitmaps[i].height);		i++;	}}void draw_bitmap(w, width, height, bitmap, x, y, line_height)	Widget          w;	Bitmap_p        bitmap;	Position       *x, *y;	Dimension      *line_height, width, height;{	XGCValues       values;	if (*x + bitmap->width > width) {		*x = 0;		*y = *y + *line_height;		*line_height = 0;	}	if (*y + bitmap->height > height)		return;	if (bitmap->height > *line_height)		*line_height = bitmap->height;	values.ts_x_origin = *x;	values.ts_y_origin = *y;	values.stipple = bitmap->bitmap;	XChangeGC(XtDisplay(w), gc, GCStipple | GCTileStipXOrigin | GCTileStipYOrigin, &values);	XFillRectangle(XtDisplay(w), XtWindow(w), gc, *x, *y, bitmap->width, bitmap->height);	*x = *x + bitmap->width;}voiddo_expose(w, client_data, call_data)	Widget          w;	XtPointer       client_data;	XtPointer       call_data;{	int             i = 0;	Dimension       line_height = 0;	Position        x = 0;	Position        y = 0;	Dimension       width, height;	create_gc(w);	XtVaGetValues(w, XmNwidth, &width, XmNheight, &height, NULL);	while (bitmaps[i].name)		draw_bitmap(w, width, height, &(bitmaps[i++]), &x, &y, &line_height);}voiddo_resize(w, client_data, call_data)	Widget          w;	XtPointer       client_data;	XtPointer       call_data;{	if (XtIsRealized(w))		XClearArea(XtDisplay(w), XtWindow(w), 0, 0, 0, 0, False);}voiddo_input(w, client_data, cd)	Widget          w;	XtPointer       client_data;	XtPointer       cd;{	int             i = 0;	Dimension       line_height = 0;	Position        x = 0;	Position        y = 0;	Dimension       width, height;	Bitmap_p        bitmap = NULL;	XmDrawingAreaCallbackStruct *call_data = (XmDrawingAreaCallbackStruct *) cd;	if (call_data->event->type == ButtonPress && call_data->event->xbutton.button == 2) {		XtVaGetValues(w, XmNwidth, &width, XmNheight, &height, NULL);		while (bitmaps[i].name) {			if (x + bitmaps[i].width > width) {				x = 0;				y = y + line_height;				line_height = 0;			}			if (y + bitmaps[i].height > height)				break;			if (bitmaps[i].height > line_height)				line_height = bitmaps[i].height;			if (call_data->event->xbutton.x <= x + bitmaps[i].width			    && call_data->event->xbutton.y <= y + bitmaps[i].height) {				bitmap = &(bitmaps[i]);				break;			}			x = x + bitmaps[i].width;			i++;		}		if (bitmap) {			printf("Got : %s\n", bitmap->name);			drag_bitmap(w, bitmap, call_data->event);		}	}}

⌨️ 快捷键说明

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