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.