[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference bulova::decw_jan-89_to_nov-90

Title:DECWINDOWS 26-JAN-89 to 29-NOV-90
Notice:See 1639.0 for VMS V5.3 kit; 2043.0 for 5.4 IFT kit
Moderator:STAR::VATNE
Created:Mon Oct 30 1989
Last Modified:Mon Dec 31 1990
Last Successful Update:Fri Jun 06 1997
Number of topics:3726
Total number of notes:19516

3274.0. "change cursor" by TPOVC::JOHNNYHO () Wed Aug 29 1990 10:45

    I want to change my cursor to a predefined VMS DECwindows cursor by
    using XCreateGlyphCursor. I follow the example in manual "Guide to Xlib
    Programming: MIT C Binding" which loads cursor font by calling
    XLoadFont(dpy,"decw$cursor"). It seems the second argument is
    incorrect. How do I specify the correct cursor font? Could any give me
    an example?
    
    Thanks.
    
    Johnny             
T.RTitleUserPersonal
Name
DateLines
3274.1toolkit example runs through all cursorsCSC32::B_BRADACHWed Aug 29 1990 14:12220
    The following will go through the various fonts on the system.
    Example is from Advanced Decwindows cours.
    
    bernie
    csc/cs
    
    ================================================================

#include <stdio.h>

#ifdef VMS
#include <decw$include/DwtAppl.h>
#include <decw$cursor.h>
#else
#include <X11/DwtAppl.h>
#include <X11/decwcursor.h>
#endif

static char *font_name[27] =
{
	"decw$c_select_cursor",
	"decw$c_help_select_cursor",
	"decw$c_wait_cursor",
	"decw$c_inactive_cursor",
	"decw$c_resize_cursor",
	"decw$c_vpane_cursor",
	"decw$c_hpane_cursor",
	"decw$c_text_insertion_cursor",
	"decw$c_text_insertion_bl_cursor",
	"decw$c_cross_hair_cursor",
	"decw$c_draw_cursor",
	"decw$c_pencil_cursor",
	"decw$c_center_cursor",	        
	"decw$c_rightselect_cursor",
	"decw$c_wselect_cursor",
	"decw$c_eselect_cursor",
	"decw$c_x_cursor",
	"decw$c_circle_cursor",
	"decw$c_mouse_cursor",
	"decw$c_lpencil_cursor",
	"decw$c_leftgrab_cursor",
	"decw$c_grabhand_cursor",
	"decw$c_rightgrab_cursor",
	"decw$c_leftpointing_cursor",
	"decw$c_uppointing_cursor",
	"decw$c_rightpointing_cursor",
	"decw$c_check_cursor" };

#define MAXARGS           4
static XtCallbackProc LabelCreated();
static XtCallbackProc ButtonArmed(), ButtonActivated();

/* DECwindows Resource Manager (DRM) data structures */

static DRMHierarchy hierarchy;          /* DRM hierarchy id */

/***
   Make sure the UID file has the proper name 
***/

static char *namvec[] = {"dwcursor.uid"};
                                        /* DRM file list */
static DRMCode class;

/*** 
   Register any new callbacks 
***/

static DRMRegisterArg regvec[] = {
    {"ButtonArmed", (caddr_t) ButtonArmed}, 
    {"ButtonActivated", (caddr_t) ButtonActivated},
    {"LabelCreated", (caddr_t) LabelCreated}
};

/* macros for counting things in file and name lists */

#define nFiles(x)         (sizeof(x)/sizeof(char *))
#define nRegs(x)          (sizeof(x)/sizeof(DRMRegisterArg))

Widget label;
    Widget top_level, main_widget;

Display *display;
Window window;
Colormap cmap;
XColor red, white, dummy;
int screen;
int cursor_num;

Font cursorfont;
Cursor mycursor;

main(argc, argv)
    unsigned int argc;
    char *argv[];
{

    int status, n;
    Arg args[MAXARGS];

    /* Initialize the DECwindows Resource Manager */

    DwtInitializeDRM();

    /* Initialize the toolkit, and create the top-level widget */

    top_level = XtInitialize("Lab6 Solution", "Example", NULL, 0, &argc, argv);

    n = 0;
    XtSetArg(args[n], DwtNx, 340);
    ++n;
    XtSetArg(args[n], DwtNy, 288);
    ++n;
    XtSetArg(args[n], XtNallowShellResize, True);
    ++n;
    XtSetValues(top_level, args, n);

    /* Define the DRM hierarchy */

    status = DwtOpenHierarchy(nFiles(namvec), 
                                        /* number of files */
      namvec,                           /* file names */
      NULL,                             /* no extensions */
      &hierarchy);                      /* pointer to hierarchy id */

    if (status != DRMSuccess) {
        fprintf(stderr, "Can't open DRM hierarchy\n");
        exit(0);
    }

    /* Register callback routines */

    DwtRegisterDRMNames(regvec, nRegs(regvec));

/***
   Make sure you're fetching the top widget in the .uil widget tree
***/

    /* Ask DRM to create the pushbutton widget */

    status = DwtFetchWidget(hierarchy,  /* DRM hierarchy id */
      "mainWidget",                     /* index of widget to fetch */
      top_level,                        /* parent widget */
      &main_widget,                     /* returned widget id */
      &class);                          /* returned widget class */

    if (status != DRMSuccess) {
        fprintf(stderr, "Can't fetch widget\n");
        exit(0);
    }

/***
   Modify XtManageChild so you are managing the widget you fetched 
***/

    /* Include fetched widget in its parent's managed set */

    XtManageChild(main_widget);

    XtRealizeWidget(top_level);

    load_font();

    XtMainLoop();                       /* Never returns */
}

static XtCallbackProc LabelCreated(widget, tag, reason)
    Widget widget;
    char *tag;
    DwtAnyCallbackStruct *reason;
{
    label = widget;
}

static XtCallbackProc ButtonArmed(widget, tag, reason)
    Widget widget;
    char *tag;
    DwtAnyCallbackStruct *reason;
{
    Arg arg;


    /* change string in label to reflect new cursor */

    XtSetArg(arg, DwtNlabel, DwtLatin1String(font_name[cursor_num/2]));
    XtSetValues(label, &arg, 1);
}

static XtCallbackProc ButtonActivated(widget, tag, reason)
    Widget widget;
    char *tag;
    DwtAnyCallbackStruct *reason;
{
	mycursor = XCreateGlyphCursor(display, cursorfont, cursorfont,
		cursor_num, cursor_num + 1, &red,
		&white);
	XDefineCursor(display, window, mycursor);
	cursor_num = cursor_num + 2;
	/* don't do pencil cursor, because it blows up the server */
	if (cursor_num == 22) cursor_num = cursor_num + 2;
	if (cursor_num == 38) cursor_num = cursor_num + 2;
	/* nothing between 46 and 52 seems to work */
	if (cursor_num >= 46) exit();
}

load_font()
{
display = XtDisplay(top_level);
window = XtWindow(top_level);
screen = DefaultScreen(display);
cmap = DefaultColormap(display, screen);

XAllocNamedColor(display, cmap, "white", &white, &dummy);
XAllocNamedColor(display, cmap, "red", &red, &dummy);

cursorfont = XLoadFont(display, "DECW$CURSOR");
}