main:
int currentX=0,currentY=0,currentR=10;
Mientras se arrastra el ratón con un botón pulsado necesitamos saber si debemos cambiar la posición del centro del círculo, o bien cambiar su radio. Para ello usaremos una variable mode que nos indicará el modo en que estamos (CHANGERADIO, CHANGECENTER o NOCHANGE). Incluimos en nuestro fichero fuente las tres constantes simbólicas siguientes:
#define CHANGECENTER 0 #define CHANGERADIO 1 #define NOCHANGE 2
y la variable mode la incluimos dentro del main, que inicializamos con NOCHANGE.
int mode=NOCHANGE;
El programa también necesitará una serie de variables relacionadas directamente con el interfaz gráfico que pasamos a describir en los siguientes párrafos.
En las funciones de Xlib se necesita siempre usar los parámetros Display y número de screen. Declararemos para ello dos variables globales en nuestro programa:
Display *display; int screen_num;
Otras variables locales que declararemos dentro de la función main son las siguientes:
Window win;
unsigned int width, height, x, y; /* anchura de ventana y posición */
unsigned int borderwidth = 4; /* 4 pixels */
unsigned int display_width, display_height;
unsigned long foreground_pixel,
background_pixel; /* valores de pixel (color) */
XEvent report;
GC gc;
XGCValues values;
El significado de estas variables es el siguiente:
Window win: La ventana de la aplicación.
unsigned int width, height, x, y: Anchura, altura y posición de la ventana.
unsigned int display_width, display_height: Serán usadas para obtener la anchura y altura del display (pantalla).
long foreground_pixel: Color con el que dibujaremos en la ventana el círculo.
background_pixel: Color del background de la ventana.
XEvent report: Usado para ir leyendo un evento de la cola de eventos.
GC gc: El contexto gráfico usado para dibujar el círculo.
XGCValues values: Máscara usada en la creación del contexto gráfico.