Volver al índice
; Próximo: Dibujando en X
; Previo: Introducción
Ventanas
Las ventanas de cada pantalla están organizadas en forma de árbol con una ventana
raíz que se crea al arrancar el servidor y ocupa toda la pantalla.
La parte visible de una ventana es sólo la que está inscrita en la ventana "padre". El gestor de
ventanas maneja sólo las ventanas hijas de la raíz.
El orden de apilamiento determina qué ventana queda encima entre ventanas "hermanas" que se
solapan. Las ventanas "hijas" permanecen siempre delante de su padre.
Una ventana creada es visible cuando:
- Está proyectada (XMapWindow).
- Sus ventanas antecesoras están proyectadas.
- No está oculta por otras ventanas.
El servidor no guarda el contenido de las partes no visibles de las ventanas
(excepto si incluye Backing store). Cuando se hacen visibles
se generan eventos Expose. La aplicación deberá elegir entre:
- Redibujar toda la ventana.
- Redibujar sólo las áreas expuestas.
- Establecer una región de clipping en la ventana y redibujar.
- Recuperar el contenido de la ventana de un pixmap donde la aplicación guarde una copia
del contenido.
Xlib proporciona dos funciones para crear ventanas: XCreateSimpleWindow
y XCreateWindow. La primera permite crear una ventana especificando
sólo su geometría y dos atributos configurables (color de fondo y del borde).
El resto de los atributos se heredan de la ventana padre.
La segunda permite especificar todos los atributos heredándose igualmente los
no especificados.
Los atributos de una ventana se pueden dividir en tres grupos:
- Atributos asociados a la geometría de la ventana
- Posición
- En pixels; relativa a la esquina superior izquierda de la ventana padre.
- Altura y anchura
- En pixels; no incluye el borde.
- Anchura del borde
- En pixels; cero significa sin borde.
- Orden de apilamiento.
- Este atributo no puede especificarse en la creación de la ventana. La
ventana se crea "encima" de la ventana padre y de todas sus "hermanas".
- Atributos no configurables (fijados en la creación)
- Profundidad
- Número de planos (bits por pixel) usados por la ventana.
- Clase
- De entrada/salida o sólo de entrada (raramente usada).
- Visual
- Tipo de funcionamiento del hardware gráfico.
- Atributos configurables
- Background
- Fondo de la ventana. Puede ser de un único color (background_pixel) o un patron
de relleno (background_pixmap).
- Borde
- Especifica si el borde es de un único color (border_pixel) o se usa un patron de relleno
(border_pixmap)
- Gravedad de bit
- Comportamiento del servidor ante un cambio de tamaño de la ventana. Normalmente elimina
el contenido de la ventana. Es posible pedir al servidor que recoloque el contenido previo siguiendo un
criterio especificado, aunque el servidor puede no incluir esta funcionalidad.
- Gravedad de ventana
- Especifica como el servidor reposicionará las ventanas hijas cuando la ventana padre cambia de
tamaño.
- Backing store
- Solicita al servidor que mantega el contenido de la ventana mientras no está visible parcial o
totalmente. No está disponible en todos los servidores.
- Save under
- Solicita al servidor que mantenga el contenido de las regiones de las ventanas que queden
ocultas por esta ventana. No está disponible en todos los servidores.
- Manejo de eventos
- La máscara de eventos especifica los eventos relativos a esta ventana que se notificarán al
cliente.
La máscara de "no propagación" especifica los eventos que no se propagarán cuando no estén
seleccionados.
- Override redirect
- Especifica que el gestor de ventanas no manejará esta ventana.
- Mapa de color
- Mapa de color que se usará en esta ventana.
- Cursor
- Especifica qué cursor aparecerá cuando el puntero esté en esta ventana.
Cambiando los atributos de una ventana existente
Los atributos configurables de una ventana ya existente pueden ser modificados
usando la primitiva XChangeWindowAttributes. Adicionalmente, existen
primitivas para cambiar específicamente algún atributo (por ejemplo, el
cursor se puede cambiar usando XDefineCursor y el color de fondo
de la ventana mediante XSetWindowBackground).
Asimismo, se puede modificar la geometría de una ventana existente usando
la primitiva XConfigureWindow que permite cambiar cualquier atributo
geométrico. Como en el caso anterior, existen también primitivas para cambiar
algún atributo geométrico específico (por ejemplo, XMoveWindow para
cambiar la posición o XLowerWindow para poner a una ventana "debajo de
sus hermanas").
Volver al índice
; Próximo: Dibujando en X
; Previo: Introducción