Blame tests/Performance/Mwm/focus_icon.c

Packit b099d7
/* 
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
*/ 
Packit b099d7
/* 
Packit b099d7
 * HISTORY
Packit b099d7
*/ 
Packit b099d7
#ifdef REV_INFO
Packit b099d7
#ifndef lint
Packit b099d7
static char rcsid[] = "$XConsortium: focus_icon.c /main/7 1995/07/14 12:02:11 drk $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
/*
Packit b099d7
 *	file: focus_icon.c
Packit b099d7
 *
Packit b099d7
 *	Attempts to warp pointer to move on the icons rapidly to check
Packit b099d7
 *	enter/leave compression by mwm.
Packit b099d7
 */
Packit b099d7
Packit b099d7
#include	<stdio.h>
Packit b099d7
Packit b099d7
#include	<X11/Xlib.h>
Packit b099d7
Packit b099d7
#define	DEFAULT_VALUE	20
Packit b099d7
#define	DEFAULT_STEP	95
Packit b099d7
#define	DEF_MAX_MIN_XPOS	500
Packit b099d7
#define	DEF_MAX_MAX_XPOS	800
Packit b099d7
#define	DEF_NUM_TRIALS	10
Packit b099d7
Packit b099d7
Display	*display;
Packit b099d7
Packit b099d7
main(argc, argv)
Packit b099d7
int		argc;
Packit b099d7
char	*argv[];
Packit b099d7
{
Packit b099d7
Packit b099d7
	Window	root_win;
Packit b099d7
	Window	root, child;
Packit b099d7
	int		root_x, root_y, win_x, win_y;
Packit b099d7
	unsigned int	key_buttons;
Packit b099d7
	XWindowAttributes	win_attrs;
Packit b099d7
	int		root_width, root_height;
Packit b099d7
	int		y_decr, x_pos, x_step, min_x, y_pos, max_xpos;
Packit b099d7
	int		num_trials;
Packit b099d7
	int		count = 0;
Packit b099d7
	char	c;
Packit b099d7
	int		i, j;
Packit b099d7
	char		d_name[44];
Packit b099d7
Packit b099d7
Packit b099d7
	num_trials = DEF_NUM_TRIALS;
Packit b099d7
	x_step = DEFAULT_STEP;
Packit b099d7
	x_pos = y_decr = DEFAULT_VALUE;
Packit b099d7
	max_xpos = DEF_MAX_MAX_XPOS;
Packit b099d7
	strcpy(d_name,":0");
Packit b099d7
Packit b099d7
	if (argc > 1)
Packit b099d7
		while (--argc > 0) {
Packit b099d7
Packit b099d7
			argv++;
Packit b099d7
			c = **argv;
Packit b099d7
			if (c != '-')
Packit b099d7
				continue;
Packit b099d7
			c = *(*argv + 1);
Packit b099d7
Packit b099d7
			switch(c) {
Packit b099d7
Packit b099d7
				case 'x':
Packit b099d7
					x_pos = atoi(*++argv);
Packit b099d7
					break;
Packit b099d7
				case 'y':
Packit b099d7
					y_decr = atoi(*++argv);
Packit b099d7
					break;
Packit b099d7
				case 'n':
Packit b099d7
					num_trials = atoi(*++argv);
Packit b099d7
					break;
Packit b099d7
				case 's':
Packit b099d7
					x_step = atoi(*++argv);
Packit b099d7
					break;
Packit b099d7
				case 'm':
Packit b099d7
					max_xpos = atoi(*++argv);
Packit b099d7
					break;
Packit b099d7
				case 'd':
Packit b099d7
					strcpy(d_name,*++argv);
Packit b099d7
					break;
Packit b099d7
				case 'h':
Packit b099d7
					print_usage();
Packit b099d7
					break;
Packit b099d7
				default:
Packit b099d7
					break;
Packit b099d7
Packit b099d7
			}
Packit b099d7
			argc--;
Packit b099d7
		}
Packit b099d7
	if (x_pos <= 0)
Packit b099d7
		x_pos = DEFAULT_VALUE;
Packit b099d7
	if (y_decr <= 0)
Packit b099d7
		y_decr = DEFAULT_VALUE;
Packit b099d7
	if (num_trials <= 0)
Packit b099d7
		num_trials = DEF_NUM_TRIALS;
Packit b099d7
	if (x_step <= 0)
Packit b099d7
		x_step = DEFAULT_STEP;
Packit b099d7
	if (max_xpos <= 0)
Packit b099d7
		max_xpos = DEF_MAX_MIN_XPOS;
Packit b099d7
	if (max_xpos > DEF_MAX_MAX_XPOS)
Packit b099d7
		max_xpos = DEF_MAX_MAX_XPOS;
Packit b099d7
	min_x = x_pos;
Packit b099d7
Packit b099d7
	if ((display = XOpenDisplay(d_name)) == NULL) {
Packit b099d7
		fprintf(stderr, "Can not open display\n");
Packit b099d7
		exit(0);
Packit b099d7
	}
Packit b099d7
	root_win = RootWindow(display, DefaultScreen(display));
Packit b099d7
	XGetWindowAttributes(display, root_win, &win_attrs);
Packit b099d7
	root_width = win_attrs.width;
Packit b099d7
	root_height = win_attrs.height;
Packit b099d7
	y_pos = root_height - y_decr;
Packit b099d7
Packit b099d7
#ifdef	DEBUG
Packit b099d7
	printf("root_width = %d root_height = %d\n", root_width, root_height);
Packit b099d7
#endif
Packit b099d7
Packit b099d7
	for (i = 0; i < num_trials; i++) {
Packit b099d7
Packit b099d7
		/* Move left to right first */
Packit b099d7
		for (x_pos = min_x; x_pos <= max_xpos; x_pos += x_step) {
Packit b099d7
			XWarpPointer(display, None, root_win, 0, 0, root_width, 
Packit b099d7
						 root_height, x_pos, y_pos);
Packit b099d7
			XFlush(display);
Packit b099d7
			count++;
Packit b099d7
		}
Packit b099d7
Packit b099d7
		/* And then move right to left */
Packit b099d7
		for (x_pos = max_xpos; x_pos >= min_x; x_pos -= x_step) {
Packit b099d7
			XWarpPointer(display, None, root_win, 0, 0, root_width, 
Packit b099d7
						 root_height, x_pos, y_pos);
Packit b099d7
			XFlush(display);
Packit b099d7
			count++;
Packit b099d7
		}
Packit b099d7
Packit b099d7
	}
Packit b099d7
#ifdef	DEBUG
Packit b099d7
	printf ("no. of warps = %d\n", count);
Packit b099d7
	XQueryPointer(display, root_win, &root, &child, &root_x, &root_y, 
Packit b099d7
				  &win_x, &win_y, &key_buttons);
Packit b099d7
Packit b099d7
	printf("root_x = %d root_y = %d win_x = %d win_y = %d key_buttons = %d\n",
Packit b099d7
		   root_x, root_y, win_x, win_y, key_buttons);
Packit b099d7
#endif
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
Packit b099d7
print_usage()
Packit b099d7
{
Packit b099d7
	printf("Usage: focus [-x startx] [-y y_decr] [-n trials] [-m max_xpos] [-s x_step] [-d display] [-h]\n");
Packit b099d7
	printf("where - \n");
Packit b099d7
	printf("\tstartx - X position from where to start moving the cursor\n");
Packit b099d7
	printf("\ty_decr - Y value to be subtracted from screen height to get y pos.\n");
Packit b099d7
	printf("\ttrials - no. of roundtrips that the cursor will make\n");
Packit b099d7
	printf("\tmax_xpos - Max. value of X cursor will move to in forward direction\n");
Packit b099d7
	printf("\tx_step - steps in no. of pixels cursor willmove in X direction\n");
Packit b099d7
	printf("\tdisplay - display name\n");
Packit b099d7
	printf("\t\"-h\" - will print out this message\n");
Packit b099d7
Packit b099d7
	exit(0);
Packit b099d7
}